PSCSIWMI_QUERY_DATABLOCK Rückruffunktion (scsiwmi.h)
Die HwScsiWmiQueryDataBlock Routine eines Miniporttreibers wird aufgerufen, um eine einzelne Instanz oder alle Instanzen eines Datenblocks abzurufen. Diese Routine ist erforderlich.
Syntax
PSCSIWMI_QUERY_DATABLOCK PscsiwmiQueryDatablock;
BOOLEAN PscsiwmiQueryDatablock(
[in] PVOID Context,
[in] PSCSIWMI_REQUEST_CONTEXT DispatchContext,
[in] ULONG GuidIndex,
[in] ULONG InstanceIndex,
[in] ULONG InstanceCount,
[in, out] PULONG InstanceLengthArray,
[in] ULONG BufferAvail,
[out] PUCHAR Buffer
)
{...}
Parameter
[in] Context
Verweist auf den miniport treiberdefinierten Kontextwert, der an ScsiPortWmiDispatchFunctionübergeben wird.
[in] DispatchContext
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 HwScsiWmiQueryDataBlock- als Reaktion auf eine IRP_MN_QUERY_SINGLE_INSTANCE Anforderung aufgerufen wird, gibt InstanceIndex- die instanz an, die abgefragt werden soll. Wenn HwScsiWmiQueryDataBlock- als Reaktion auf eine IRP_MN_QUERY_ALL_DATA REQUEST aufgerufen wird, ist InstanceIndex- Null.
[in] InstanceCount
Wenn HwScsiWmiQueryDataBlock- als Reaktion auf eine IRP_MN_QUERY_SINGLE_INSTANCE Anforderung aufgerufen wird, ist InstanceCount- 1. Wenn HwScsiWmiQueryDataBlock- als Reaktion auf eine IRP_MN_QUERY_ALL_DATA REQUEST aufgerufen wird, ist InstanceCount- die Anzahl der zurückzugebenden Instanzen.
[in, out] InstanceLengthArray
Verweist auf ein Array von ULONGs, die die Länge jeder Instanz des zurückzugebenden Datenblocks angeben. Dieses Array verfügt über InstanceCount--Elemente. Dieser Wert kann NULL- sein, wenn nicht genügend Speicherplatz im Ausgabepuffer vorhanden ist, um die Anforderung zu erfüllen.
[in] BufferAvail
Gibt die maximale Anzahl von Bytes an, die für den Empfang von Daten im Puffer bei Bufferverfügbar sind.
[out] Buffer
Verweist auf den Puffer, um Instanzdaten zu empfangen. Wenn der Puffer groß genug ist, um alle Daten zu empfangen, schreibt der Miniporttreiber Instanzdaten in den Puffer, wobei jede Instanz an einer Grenze von 8 Byte ausgerichtet ist. Wenn der Puffer zu klein ist, um alle Daten zu empfangen, ruft der Miniporttreiber ScsiPortWmiPostProcess mit dem Status SRB_STATUS_DATA_OVERRUN auf und legt BufferUsed- auf die Größe des Ausgabepuffers fest, der zum Erfüllen der Anforderung erforderlich ist.
Rückgabewert
HwScsiWmiQueryDataBlock- gibt SRB_STATUS_PENDING zurück, wenn die Anforderung aussteht oder ein 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 HwScsiWmiQueryDataBlock 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 HwScsiWmiQueryDataBlock Routine des Miniporttreibers auf, wenn MinorFunction eine Anforderung zum Abrufen einer einzelnen Instanz oder aller Instanzen eines Datenblocks angibt.
Der Miniporttreiber schreibt Instanzdaten in den Puffer. Für Anforderungen, die nicht pendiert werden, ruft der Miniporttreiber ScsiPortWmiPostProcess mit einem entsprechenden SrbStatus Wert auf, bevor er von HwScsiWmiQueryDataBlockzurückgegeben wird. Wenn die Anforderung stiftet, ruft der Miniporttreiber ScsiPortWmiPostProcess auf, wenn die Anforderung abgeschlossen ist.
Anforderungen
Anforderung | Wert |
---|---|
Zielplattform- | Desktop |
Header- | scsiwmi.h (include Scsiwmi.h) |