共用方式為


撰寫 Stream Minidriver

資料流程類別驅動程式的主要設計目標是處理處理作業系統的工作,其中包括支援多處理器電腦以及支援核心串流語意的複雜性。 它要求迷你驅動程式只處理它必須執行之任何作業的裝置特定部分。 類別驅動程式會為迷你驅動程式配置記憶體、針對迷你驅動程式可能需要的任何 NT 核心資源執行記事,並選擇性地 () 處理所有同步處理問題。

類別驅動程式會透過一組迷你驅動程式提供的回呼來與迷你驅動程式通訊。 撰寫串流迷你驅動程式的大部分工作都是在撰寫這些回呼時發生。

在本檔中,我們會將每種迷你驅動程式提供的常式稱為 StrMiniXxx。 迷你驅動程式可能必須為每個常式提供一或多個版本,視基礎硬體能夠執行的不同功能而定。

串流驅動程式通常可支援數個不同的資料流程。 例如,DVD 播放程式會產生音訊和視訊串流。 在核心串流的內容中,每個資料流程都會以 針腳來表示。

串流類別驅動程式會追蹤迷你驅動程式上的每個針腳。 在類別驅動程式的術語中,每個針腳類型都是 資料流程。 串流,例如針腳類型,可能會有多個實例。 由於資料流程可以接收 I/O 要求,因此驅動程式必須為每個資料流程提供回呼。

以下是迷你驅動程式可能必須提供的常式。 它們會更完整地記載于下方和參考指南中。

每個迷你驅動程式所提供的常式

StrMiniCancelPacket

StrMiniReceiveDevicePacket

StrMiniRequestTimeout

StrMiniEvent

StrMiniInterrupt

迷你驅動程式為每個個別資料流程提供的常式

StrMiniReceiveStreamDataPacket

StrMiniReceiveStreamControlPacket

StrMiniEvent

StrMiniClock

迷你驅動程式可以針對數個不同的資料流程使用相同的回呼。 回呼可以判斷其代表它從其參數呼叫的資料流程。

迷你驅動程式必須與所有 WDM 驅動程式一樣,也提供 DriverEntry 常式。 Minidriver DriverEntry 常式的主要工作是向類別驅動程式註冊迷你驅動程式。

類別驅動程式會代表迷你驅動程式接收所有 I/O 要求。 若要取得完成要求所需的資訊,類別驅動程式會建置串流要求區塊, (SRB) ,並將它傳遞給其中一個 StrMiniXXX封包 常式。 類別驅動程式會將整個裝置的 I/O 要求分派給 StrMiniReceiveDevicePacket 常式。 它會將要求傳遞至 StrMiniReceiveStreamDataPacket (,以供核心串流讀取和寫入要求) 或 StrMiniReceiveStreamControlPacket (用於其他要求) 。

一般而言,類別驅動程式會排入其要求佇列,並一次將它們傳遞至迷你驅動程式。 迷你驅動程式可以選擇性地執行自己的同步處理;minidriver 接著會負責佇列要求,無法立即處理。 如需詳細資訊,請參閱 Minidriver 同步處理

迷你驅動程式必須提供兩個額外的常式來運算元據流要求區塊。 類別驅動程式會在收到取消 IRP 時呼叫 StrMiniCancelPacket ,而且需要告知迷你驅動程式取消特定封包。 類別驅動程式也會追蹤迷你驅動程式完成串流要求區塊處理所需的時間。 如果迷你驅動程式花費太長的時間,則類別驅動程式會逾時要求,並呼叫 minidriver 的 StrMiniRequestTimeout 常式。

發生硬體中斷時,作業系統會發出類別驅動程式的訊號,然後呼叫 minidriver 的 StrMiniInterrupt 常式來處理中斷。