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) |
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk