標籤:驅動開發 windows 7
Windows 驅動基礎系列,轉載請標明出處:http://blog.csdn.net/ikerpeng/article/details/38865317
網路攝影機驅動的主要目的是通過通過硬體捕捉視頻訊號。
WDM網路攝影機驅動架構。
主要包括兩種的驅動ClassDriver(由Windows提供,為了統一標準), MiniDriver(由程式員實現)
Class Driver:
與作業系統互動,包括處理同步,提夠標準介面。
Mini Driver:
主要由類驅動調用,負責具體的硬體相關的操作。
通過一個圖看看他們的關係:
其中SRB是 Stream Request Block。
初始化:
1. 隨插即用的裝置,插入後調用Mini Driver的 DriverEntry常式;
2 Mini Driver 在自己的DriverEntry中填充HW_INITIALIZATION_DATA,然後返回StreamClassRegisterMinidriver;
3. Class Driver 中初始化一個SRB_INITIALIZE_DEVICE類型的SRB,這個SRB中的CommandData.ConfigInfo記錄著網路攝影機硬體的相關資訊;
這個SRB會傳遞給小驅動,小驅動會由此得到一些硬體的資訊並返回;同時告知類驅動,小驅動已經初始化完畢。
4. 然後類驅動再向小驅動發送一個SRB:SRB_GET_STREAM_INFO, 由此獲得:HW_STREAM_HEADER 資料資訊和 HW_STREAM_INFORMATION等資訊這些資訊中包括了網路攝影機驅動中提供的視頻映像的大小,映像的格式等資訊;
5. 然後類驅動再發送一個 HW_STREAM_INFORMATION的SRB,這次請求以後,小驅動應該做完所有的初始化操作,並返回給驅動程式。
·每個Minidriver都必須提供的常式:
StrMiniCancelPacket: 對 HW_SRB資料包進行取消的回呼函數;
StrMiniReceiveDevicePacket: 擷取 HW_SRB資料包的回呼函數;
StrMiniRequestTimeout : 對HW_SRB資料包進行逾時處理的回呼函數;
StrMiniEvent: 使小驅動支援某一事件;
StrMiniInterrupt: 當驅動遇到中斷時調用的回呼函數;
·Minidriver為每個單獨的流提供的常式:
StrMiniReceiveStreamDataPacket:對於擷取資料流的回呼函數
StrMiniReceiveStreamControlPacket: 對於控制資料流的回呼函數
StrMiniEvent: 使資料流支援一種事件
StrMiniClock: 對於數字流時鐘控制的回呼函數。
我們再來看一下驅動程式的工作流程:
1. 裝置插入,被隨插即用裝置管理器檢測到;
2. 於是建立PDO,產生相應的IRP;
3. 於是I/O子系統載入MiniDriver,並進入到DriverEntry;
4. 在DriverEntry裡面初始化:HW_INITIALIZATION_DATA 資料結構(其中包括控制SRB的HwReceivePacket);
5.類驅動程式構造SRB,並將其Command設定為SRB_INITIALIZATION_DEVICE;
6,. 將此SRB作為參數,調用HwReceivePacket;
7,如此類似構造:open close等等的SRB,調用HwReceivePacket。
本節完。
參考書目:
《 Windows 驅動開發技術詳解 》
Windows網路攝影機驅動研究(一)