Freigeben über


HW_STREAM_REQUEST_BLOCK Struktur (strmini.h)

Der Streamklassentreiber verwendet die HW_STREAM_REQUEST_BLOCK Struktur zum Übergeben von Informationen an und vom Minidriver mithilfe von minidriver bereitgestellten Rückrufen.

Syntax

typedef struct _HW_STREAM_REQUEST_BLOCK {
  ULONG                           SizeOfThisPacket;
  SRB_COMMAND                     Command;
  NTSTATUS                        Status;
  PHW_STREAM_OBJECT               StreamObject;
  PVOID                           HwDeviceExtension;
  PVOID                           SRBExtension;
  union {
    PKSSTREAM_HEADER                       DataBufferArray;
    PHW_STREAM_DESCRIPTOR                  StreamBuffer;
    KSSTATE                                StreamState;
    PSTREAM_TIME_REFERENCE                 TimeReference;
    PSTREAM_PROPERTY_DESCRIPTOR            PropertyInfo;
    PKSDATAFORMAT                          OpenFormat;
    struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
    HANDLE                                 MasterClockHandle;
    DEVICE_POWER_STATE                     DeviceState;
    PSTREAM_DATA_INTERSECT_INFO            IntersectInfo;
    PVOID                                  MethodInfo;
    LONG                                   FilterTypeIndex;
    BOOLEAN                                Idle;
  } CommandData;
  _CommandData                    _CommandData;
  ULONG                           NumberOfBuffers;
  ULONG                           TimeoutCounter;
  ULONG                           TimeoutOriginal;
  struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
  PIRP                            Irp;
  ULONG                           Flags;
  PVOID                           HwInstanceExtension;
  union {
    ULONG NumberOfBytesToTransfer;
    ULONG ActualBytesTransferred;
  };
  PKSSCATTER_GATHER               ScatterGatherBuffer;
  ULONG                           NumberOfPhysicalPages;
  ULONG                           NumberOfScatterGatherElements;
  ULONG                           Reserved[1];
} HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;

Angehörige

SizeOfThisPacket

Gibt die Größe dieser Struktur in Bytes an.

Command

Gibt den Vorgang an, der vom Rückruf des Minidrivers ausgeführt werden soll. Der Klassentreiber übergibt SRB_XXX Befehlscodes an Minidriver-Rückrufe.

Status

Wenn der Minidriver eine Datenstromanforderung abgeschlossen hat, füllt es dieses Element mit dem Statuscode der Anforderung aus. In der Dokumentation finden Sie die entsprechenden StrMiniXxxRequest Routine für die Statuscodes, die Minidriver verwenden sollen.

StreamObject

Für datenstromorientierte Anforderungen legt der Klassentreiber dies so fest, dass er auf die HW_STREAM_OBJECT Struktur verweist, die den Datenstrom angibt, für den der Klassentreiber eine Anforderung angibt.

HwDeviceExtension

Zeiger auf die Geräteerweiterung des Minidrivers. Der Minidriver kann diesen Puffer verwenden, um private Informationen aufzuzeichnen. Der Minidriver legt die Größe dieses Puffers in der HW_INITIALIZATION_DATA Struktur fest, die er übergibt, wenn er sich über StreamClassRegisterMinidriverregistriert. Der Klassentreiber übergibt auch Zeiger an diesen Puffer im HwDeviceExtension Member des HW_STREAM_OBJECT, HW_TIME_CONTEXTund PORT_CONFIGURATION_INFORMATION Strukturen, die an den Minidriver übergeben werden.

SRBExtension

Verweist auf einen nicht initialisierten Puffer, den der Klassentreiber für den Minidriver zuweist, der beim Verarbeiten dieses Streamanforderungsblocks verwendet werden soll. Dieser Puffer wird abgeglichen, sobald der Minidriver seine Behandlung des Blocks abgeschlossen hat (details hierzu finden Sie unter StreamClassDeviceNotification oder StreamClassStreamNotification).

CommandData

CommandData- ist eine Vereinigung von Mitgliedern, die für befehlscodespezifische Daten bereitgestellt werden.

CommandData.DataBufferArray

Zeigen Sie auf ein Array von KSSTREAM_HEADER Strukturen. Die Anzahl der Einträge in diesem Array wird in NumberOfBuffersangegeben. Jede KSSTREAM_HEADER beschreibt einen Datenblock.

Dieses Element wird verwendet, wenn der Befehlscode SRB_READ_DATA oder SRB_WRITE_DATAist.

CommandData.StreamBuffer

Verweist auf die HW_STREAM_DESCRIPTOR Struktur, die der Minidriver mit einer Beschreibung der von ihr unterstützten Kernelstreamingsemantik ausfüllt.

Der Minidriver gibt die Größe dieses Puffers im StreamDescriptorSize Member seiner PORT_CONFIGURATION_INFORMATION Struktur an.

Dieses Element wird verwendet, wenn der Befehlscode SRB_GET_STREAM_INFOwird.

CommandData.StreamState

Der Datenstromstatus. Weitere Informationen finden Sie unter KSPROPERTY_CONNECTION_STATE.

Dieses Element wird verwendet, wenn der Befehlscode SRB_GET_STREAM_STATE oder SRB_SET_STREAM_STATEist.

CommandData.TimeReference

Ein Zeiger auf eine STREAM_TIME_REFERENCE-Struktur.

CommandData.PropertyInfo

Verweist auf die STREAM_PROPERTY_DESCRIPTOR Struktur, die die Parameter für den Abrufen- oder Festlegenvorgang der Eigenschaft angibt.

Dieses Element wird verwendet, wenn der Befehlscode SRB_GET_DEVICE_PROPERTY, SRB_SET_DEVICE_PROPERTY, SRB_GET_STREAM_PROPERTYoder SRB_SET_STREAM_PROPERTYist.

CommandData.OpenFormat

Zeigen Sie auf die KSDATAFORMAT- Struktur, die das Format angibt.

Dieses Element wird verwendet, wenn der Befehlscode SRB_OPEN_STREAM oder SRB_PROPOSE_DATA_FORMATist.

CommandData.ConfigInfo

Zeiger auf die PORT_CONFIGURATION_INFORMATION Struktur, die zum Initialisieren des Geräts verwendet wird

Dieses Element wird verwendet, wenn der Befehlscode SRB_INITIALIZE_DEVICEwird.

CommandData.MasterClockHandle

Handle für das Uhrobjekt, das jetzt als Masteruhr dient.

Dieses Element wird verwendet, wenn der Befehlscode SRB_OPEN_MASTER_CLOCK oder SRB_INDICATE_MASTER_CLOCKist.

CommandData.DeviceState

Gibt den neuen Energiezustand an.

Dieses Element wird verwendet, wenn der Befehlscode SRB_CHANGE_POWER_STATEwird.

CommandData.IntersectInfo

Zeigen Sie auf eine STREAM_DATA_INTERSECT_INFO Struktur, die die Parameter dieses Vorgangs beschreibt.

Dieses Element wird verwendet, wenn der Befehlscode SRB_GET_DATA_INTERSECTIONwird.

CommandData.MethodInfo

Zeigen Sie auf einen Puffer, aus dem die Methodendaten gelesen oder in diesen geschrieben werden.

CommandData.FilterTypeIndex

Filtertypindex für SRB_OPEN_DEVICE_INSTANCE.

CommandData.Idle

Dieses Element ist auf TRUE- festgelegt, wenn keine geöffneten Ziehpunkte für das Gerät verbleiben. Dieses Element ist auf FALSE- festgelegt, wenn das Gerät nicht mehr im Leerlauf ist (ein Handle für das Gerät wurde geöffnet).

Dieses Element wird verwendet, wenn der Befehlscode SRB_NOTIFY_IDLE_STATEwird.

_CommandData

CommandData- ist eine Vereinigung von Mitgliedern, die für befehlscodespezifische Daten bereitgestellt werden.

NumberOfBuffers

Wenn Command entweder SRB_READ_DATA oder SRB_WRITE_DATAist, gibt dies die Anzahl der Einträge im Array KSSTREAM_HEADER Strukturen an, die mit der Adresse beginnen, auf die CommandData.DataBufferArrayverweist. Andernfalls wird dieser Parameter nicht verwendet.

TimeoutCounter

Die Anzahl der Sekunden, bevor diese Anforderung zu einem Zeitüberschreitungsout wird. Der Klassentreiber erhöht dies einmal pro Sekunde. Wenn der Klassentreiber TimeoutCounter auf Null, bevor der Minidriver diese Anforderung abgeschlossen hat, ruft er die StrMiniRequestTimeout Routine des Minidrivers auf. Wenn der Minidriver dies auf Null festlegt, wird für die Anforderung kein Timeout ausgeführt.

TimeoutOriginal

Der Klassentreiber legt dies auf den ursprünglichen Wert von TimeoutCounter beim Erstellen des SRB fest.

NextSRB

Verweist auf einen anderen Datenstromanforderungsblock. Der Minidriver kann dieses Mitglied verwenden, um Datenstromanforderungsblöcke in die Warteschlange zu stellen.

Irp

Zeiger auf das IRP für die Anforderung. Die meisten Minidriver müssen dieses Mitglied nicht verwenden.

Flags

Gibt den Anforderungstyp an. Der Klassentreiber und der Minidriver können diesen Member verwenden, um zu bestimmen, an welchen Rückruf der Klassentreiber diesen Streamanforderungsblock übergeben hat.

Wert Verwendeter Rückruf
Nichts StrMiniReceiveDevicePacket
SRB_HW_FLAGS_STREAM_REQUEST StrMiniReceiveStreamControlPacket
SRB_HW_FLAGS_DATA_TRANSFER StrMiniReceiveStreamDataPacket-
SRB_HW_FLAGS_STREAM_REQUEST StrMiniReceiveStreamDataPacket-

SRB_HW_FLAGS_STREAM_REQUEST Bit ist für streamspezifische Anforderungen festgelegt (die an die StrMiniReceiveStreamXxxPacket Routinen des Minidrivers übergeben werden). Das SRB_HW_FLAGS_DATA_TRANSFER Bit ist für Datenübertragungsanforderungen festgelegt (die an den Minidriver übergeben werden).

HwInstanceExtension

Zeiger auf die Instanzerweiterung des Minidrivers. Der Minidriver kann diesen Puffer verwenden, um private Informationen global für diese Instanz des Minidrivers aufzuzeichnen. Der Minidriver legt die Größe dieses Puffers in der HW_INITIALIZATION_DATA Struktur fest, die er übergibt, wenn er sich über StreamClassRegisterMinidriverregistriert.

NumberOfBytesToTransfer

Bei einer SRB_READ_DATA oder SRB_WRITE_DATA Anforderung wird die Anzahl der zu übertragenden Bytes verwendet.

ActualBytesTransferred

Bei Steuerelementanforderungen wird die Anzahl der bytes tatsächlich übertragen.

ScatterGatherBuffer

Verweist auf ein Array von KSSCATTER_GATHER Strukturen des Formulars:

typedef struct {
    PHYSICAL_ADDRESS PhysicalAddress;
    ULONG Length;
} KSSCATTER_GATHER, *PKSSCATTER_GATHER;

Das Array beschreibt eine Punkt-/Gather-Liste, die vom Minidriver zum Ausführen von DMA verwendet werden kann. Der Speicher muss nicht überprüft, gesperrt, zugeordnet oder geleert werden. Der Streamklassentreiber führt diese für den Minidriver aus.

NumberOfPhysicalPages

Gibt die Größe des Arrays an, das im ScatterGatherBuffer Member übergeben wird.

NumberOfScatterGatherElements

Gibt die Anzahl der physikalischen Elemente an, auf die ScatterGatherBufferverweist.

Reserved[1]

Das Feld "Reserviert[1]" ist für die Systemverwendung reserviert. Nicht verwenden.

Bemerkungen

Der Streamklassentreiber übergibt Zeiger an HW_STREAM_REQUEST_BLOCK Strukturen an die StrMiniReceiveStreamDataPacket, StrMiniReceiveStreamControlPacketund StrMiniReceiveDevicePacket Routinen.

Der Minidriver besitzt diesen Datenstromanforderungsblock, bis das Anforderungs-Zeitüberschreitungs- oder Abschluss der Anforderung erfolgt. Der Minidriver signalisiert dem Klassentreiber, dass er die Anforderung durch Aufrufen von StreamClassDeviceNotification(DeviceRequestComplete, pSrb->HwDeviceExtension, pSRB) für gerätespezifische Anforderungen oder aufrufen StreamClassStreamNotification(StreamRequestComplete, pSrb->StreamObject, pSrb) für streamspezifische Anforderungen. (Der Minidriver kann auch eine Anforderung abschließen, indem StreamClassCompleteRequestAndMarkQueueReady(pSrb) aufgerufen wird. Weitere Informationen finden Sie in dieser Routine.)

Wenn der Klassentreiber die Anforderung austiment, ruft er den StrMiniRequestTimeout Routine des Minidrivers auf, der die Verarbeitung der Anforderung beendet. Wenn der Minidriver eine Anforderung für die spätere Verarbeitung in die Warteschlange stellt, sollte der TimeoutCounter- Member auf Null festgelegt werden, wodurch verhindert wird, dass der Klassentreiber die Anforderung abläuft. Sobald der Minidriver bereit ist, die Verarbeitung der Anforderung fortzusetzen, sollte der TimeoutCounter- Member auf den Wert von TimeoutOriginal-zurückgesetzt werden.

Anforderungen

Anforderung Wert
Header- strmini.h (einschließlich Strmini.h)