struktur HW_STREAM_REQUEST_BLOCK (strmini.h)

Driver kelas stream menggunakan struktur HW_STREAM_REQUEST_BLOCK untuk meneruskan informasi ke dan dari minidriver, menggunakan panggilan balik yang disediakan minidriver.

Sintaks

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;

Anggota

SizeOfThisPacket

Menentukan ukuran, dalam byte, dari struktur ini.

Command

Menentukan operasi yang akan dilakukan oleh panggilan balik minidriver. Driver kelas meneruskan kode perintah SRB_XXX ke panggilan balik minidriver.

Status

Ketika minidriver menyelesaikan permintaan stream, itu mengisi anggota ini dengan kode status permintaan. Lihat dokumentasi untuk rutinitas PermintaanStrMiniXxx yang sesuai untuk minidriver kode status yang diharapkan digunakan.

StreamObject

Untuk permintaan berorientasi aliran, driver kelas mengatur ini untuk menunjuk ke struktur HW_STREAM_OBJECT yang menentukan aliran driver kelas yang membuat permintaan.

HwDeviceExtension

Arahkan ke ekstensi perangkat minidriver. Minidriver dapat menggunakan buffer ini untuk merekam informasi privat. Minidriver mengatur ukuran buffer ini dalam struktur HW_INITIALIZATION_DATA yang dilewatinya ketika mendaftarkan dirinya melalui StreamClassRegisterMinidriver. Driver kelas juga meneruskan pointer ke buffer ini di anggota HwDeviceExtension dari struktur HW_STREAM_OBJECT, HW_TIME_CONTEXT, dan PORT_CONFIGURATION_INFORMATION yang diteruskannya ke minidriver.

SRBExtension

Menunjuk ke buffer yang tidak diinisialisasi yang dialokasikan driver kelas untuk digunakan minidriver saat memproses blok permintaan aliran ini. Buffer ini dibatalkan alokasinya setelah minidriver menyelesaikan penanganan blok (lihat StreamClassDeviceNotification atau StreamClassStreamNotification untuk detailnya).

CommandData

CommandData adalah penyatuan anggota yang disediakan untuk data khusus kode perintah.

CommandData.DataBufferArray

Penunjuk ke array struktur KSSTREAM_HEADER . Jumlah entri dalam array ini ditentukan dalam NumberOfBuffers. Setiap KSSTREAM_HEADER menjelaskan satu blok data.

Anggota ini digunakan ketika kode perintah SRB_READ_DATA atau SRB_WRITE_DATA.

CommandData.StreamBuffer

Menunjuk ke struktur HW_STREAM_DESCRIPTOR yang diisi minidriver dengan deskripsi semantik streaming kernel yang didukungnya.

Minidriver menentukan ukuran buffer ini di anggota StreamDescriptorSize dari struktur PORT_CONFIGURATION_INFORMATION-nya .

Anggota ini digunakan ketika kode perintah SRB_GET_STREAM_INFO.

CommandData.StreamState

Status aliran. Lihat KSPROPERTY_CONNECTION_STATE untuk detailnya.

Anggota ini digunakan ketika kode perintah SRB_GET_STREAM_STATE atau SRB_SET_STREAM_STATE.

CommandData.TimeReference

Penunjuk ke struktur STREAM_TIME_REFERENCE.

CommandData.PropertyInfo

Menunjuk ke struktur STREAM_PROPERTY_DESCRIPTOR yang menentukan parameter untuk properti dapatkan atau atur operasi.

Anggota ini digunakan ketika kode perintah SRB_GET_DEVICE_PROPERTY, SRB_SET_DEVICE_PROPERTY, SRB_GET_STREAM_PROPERTY, atau SRB_SET_STREAM_PROPERTY.

CommandData.OpenFormat

Penunjuk ke struktur KSDATAFORMAT yang menentukan format.

Anggota ini digunakan ketika kode perintah SRB_OPEN_STREAM atau SRB_PROPOSE_DATA_FORMAT.

CommandData.ConfigInfo

Penunjuk ke struktur PORT_CONFIGURATION_INFORMATION yang digunakan untuk menginisialisasi perangkat

Anggota ini digunakan ketika kode perintah SRB_INITIALIZE_DEVICE.

CommandData.MasterClockHandle

Tangani untuk objek jam yang sekarang berfungsi sebagai jam master.

Anggota ini digunakan ketika kode perintah SRB_OPEN_MASTER_CLOCK atau SRB_INDICATE_MASTER_CLOCK.

CommandData.DeviceState

Menentukan status daya baru.

Anggota ini digunakan ketika kode perintah SRB_CHANGE_POWER_STATE.

CommandData.IntersectInfo

Penunjuk ke struktur STREAM_DATA_INTERSECT_INFO yang menjelaskan parameter operasi ini.

Anggota ini digunakan ketika kode perintah SRB_GET_DATA_INTERSECTION.

CommandData.MethodInfo

Arahkan ke buffer tempat data metode akan dibaca atau ditulis.

CommandData.FilterTypeIndex

Indeks jenis filter untuk SRB_OPEN_DEVICE_INSTANCE.

CommandData.Idle

Anggota ini diatur ke TRUE jika tidak ada handel terbuka ke perangkat yang tersisa. Anggota ini diatur ke FALSE jika perangkat tidak lagi menganggur (handel ke perangkat telah dibuka).

Anggota ini digunakan ketika kode perintah SRB_NOTIFY_IDLE_STATE.

_CommandData

CommandData adalah penyatuan anggota yang disediakan untuk data khusus kode perintah.

NumberOfBuffers

Jika Command SRB_READ_DATA atau SRB_WRITE_DATA, maka ini menentukan jumlah entri dalam array struktur KSSTREAM_HEADER yang dimulai pada alamat yang ditujukan oleh CommandData.DataBufferArray. Jika tidak, parameter ini tidak digunakan.

TimeoutCounter

Jumlah detik sebelum permintaan ini habis. Driver kelas mengurangi ini sekali per detik. Jika driver kelas menurunkan TimeoutCounter ke nol sebelum minidriver menyelesaikan permintaan ini, itu akan memanggil rutinitas StrMiniRequestTimeout minidriver. Jika minidriver mengatur ini ke nol, permintaan tidak kehabisan waktu.

TimeoutOriginal

Driver kelas mengatur ini ke nilai asli TimeoutCounter setelah pembuatan SRB.

NextSRB

Menunjuk ke blok permintaan aliran lain. Minidriver dapat menggunakan anggota ini untuk mengantre blok permintaan aliran.

Irp

Arahkan ke IRP untuk permintaan tersebut. Sebagian besar minidriver tidak perlu menggunakan anggota ini.

Flags

Menentukan jenis permintaan. Driver kelas dan minidriver dapat menggunakan anggota ini untuk menentukan panggilan balik mana yang digunakan driver kelas untuk melewati blok permintaan aliran ini.

Nilai Panggilan balik yang digunakan
Tidak ada 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 diatur untuk permintaan khusus aliran (yang diteruskan ke rutinitas PaketStrMiniReceiveStreamXxx minidriver). Bit SRB_HW_FLAGS_DATA_TRANSFER diatur untuk permintaan transfer data (yang diteruskan ke minidriver).

HwInstanceExtension

Arahkan ke ekstensi instans minidriver. Minidriver dapat menggunakan buffer ini untuk merekam informasi privat global ke instans minidriver ini. Minidriver mengatur ukuran buffer ini dalam struktur HW_INITIALIZATION_DATA yang dilewatinya ketika mendaftarkan dirinya melalui StreamClassRegisterMinidriver.

NumberOfBytesToTransfer

Untuk permintaan SRB_READ_DATA atau SRB_WRITE_DATA, jumlah byte yang akan ditransfer.

ActualBytesTransferred

Untuk permintaan kontrol, jumlah byte benar-benar ditransfer.

ScatterGatherBuffer

Menunjuk ke array struktur KSSCATTER_GATHER, dari formulir:

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

Array menjelaskan daftar sebar/kumpulkan yang dapat digunakan oleh minidriver untuk melakukan DMA. Memori tidak perlu diselimuti, dikunci, dipetakan, atau dibersihkan. Driver kelas stream melakukan ini untuk minidriver.

NumberOfPhysicalPages

Menentukan ukuran array yang diteruskan di anggota ScatterGatherBuffer .

NumberOfScatterGatherElements

Menentukan jumlah elemen fisik yang diacu oleh ScatterGatherBuffer.

Reserved[1]

Bidang Reserved[1] disediakan untuk penggunaan sistem. Jangan gunakan.

Keterangan

Driver kelas stream meneruskan pointer ke HW_STREAM_REQUEST_BLOCK struktur ke rutinitas StrMiniReceiveStreamDataPacket minidriver, StrMiniReceiveStreamControlPacket, dan StrMiniReceiveDevicePacket .

Minidriver memiliki blok permintaan aliran ini sampai waktu permintaan habis atau menyelesaikan permintaan. Minidriver memberi sinyal ke driver kelas bahwa ia telah menyelesaikan permintaan dengan memanggil StreamClassDeviceNotification(DeviceRequestComplete, pSrb-HwDeviceExtension>, pSRB) untuk permintaan khusus perangkat, atau memanggil StreamClassStreamNotification(StreamRequestComplete, pSrb-StreamObject>, pSrb) untuk permintaan khusus aliran. (Minidriver juga dapat menyelesaikan permintaan dengan memanggil StreamClassCompleteRequestAndMarkQueueReady(pSrb). Lihat rutinitas tersebut untuk detailnya.)

Jika waktu driver kelas habis permintaan, itu akan memanggil rutinitas StrMiniRequestTimeout minidriver, yang memiliki tanggung jawab mengakhiri pemrosesan permintaan. Jika minidriver mengantrekan permintaan untuk diproses nanti, itu harus mengatur anggota TimeoutCounter ke nol, yang akan mencegah driver kelas kehabisan waktu permintaan. Setelah minidriver siap untuk melanjutkan pemrosesan permintaan, itu harus mengatur ulang anggota TimeoutCounter ke nilai TimeoutOriginal.

Persyaratan

Persyaratan Nilai
Header strmini.h (termasuk Strmini.h)