裝置堆疊例項

2021-06-06 12:44:34 字數 1298 閱讀 4082

為了詳細說明wdm裝置物件以及這些裝置物件是如何分層的。本文以針對usb硬體的驅動為例,看看裝置物件是如何建立的。下圖表明了裝置物件是如何被乙個驅動程式建立的。

我們從最底下開始**,該裝置棧中裝置物件如下所示:

1:針對pci 匯流排建立的pdo(physicdevice object)和fdo (functiondevice object)

根匯流排驅動首先會列舉內部系統匯流排(根匯流排)並為每乙個找到的裝置建立乙個pdo。pdo中的乙個就是為pci匯流排建立的(根匯流排的pdo和fdo沒有在圖中標出)。

pnp管理器把pci驅動當做pci匯流排的功能驅動,並把該驅動載入進來(如果沒有載入的話),然後把pdo傳遞給pci驅動。pci驅動會在它的adddevice例程裡面為pci匯流排建立乙個fdo(iocreatedevice)並把fdo掛載到裝置棧上(ioattachdevicetodevicestack)。該例中沒有針對pci匯流排的過濾程式。

2:針對usb主控制器建立的pdo和fdo

pnp管理器指揮pci驅動開始它的裝置(irp_mn_start_device)並且查詢他們的子裝置,pci驅動列舉它匯流排上所有的裝置。比如說:pci驅動找到乙個usb主控制器然後為該裝置建立乙個pdo,圖中寬箭頭表示usb主控制器是pci匯流排的乙個子裝置。pci驅動有責任為它的子裝置建立pdo,關係類似於匯流排驅動與pci匯流排。

針對該usb主控制器,pnp管理器為它指定小驅動(miniclass driver)/類驅動(class driver)來當做它的功能驅動,然後把該對驅動載入進來。pnp管理器在合適的時間呼叫該驅動組合並為該usb主控制器掛載乙個fdo。該例中沒有針對usb主控制器的過濾程式。

3:針對usb hub建立的pdo和fdo

usb主控制器列舉匯流排上的裝置,定位單獨埠中的usb hub,並為該hub建立乙個pdo,usb hub 驅動為該hub建立並掛載fdo。該例中沒有針對usb hub的過濾程式。

4:針對操縱桿裝置建立餓pdo,fdo,以及兩個過濾器

usb hub列舉匯流排上的裝置,定位hid 裝置(本例為遊戲操縱桿裝置),並為該裝置建立乙個pdo。

下圖描述的和上乙個圖描述的是同乙個裝置棧。我們重點關注哪乙個裝置物件被建立以及被哪乙個驅動管理。

匯流排驅動跨越的不單單是乙個裝置棧,匯流排驅動為它的每乙個匯流排介面卡/控制器建立乙個fdo,並且為他的每乙個子裝置建立乙個pdo。

python numpy 矩陣堆疊例項

在實際操作中,遇到了矩陣堆疊的操作,本來想著自己寫乙個函式,後來想,應該有庫函式,於是一陣找尋 import numpy as np a np.array 1,2,3 b np.array 4,5,6 np.stack a,b 預設行堆疊 輸出 array 1,2,3 4,5,6 irvijus n...

磁碟的裝置驅動堆疊

磁碟的裝置驅動堆疊 本文節選自 windows 核心情景分析 採用開源 reactos 一書 讀者已經在前幾節中看到,裝置的驅動常常分成 類裝置驅動 和 埠裝置驅動 兩層。例如滑鼠器就成為乙個裝置的類,而具體又有ps 2滑鼠器 串列埠滑鼠 器以及基於usb的hid滑鼠器,所以滑鼠器的驅動就分為一種類...

CH 堆疊裝置的程式備註

void comunication pwork void 傳送f1指令 傳送p狀態指令 傳送c狀態指令 void checkprtcmd p void 傳送貼標列印資訊 p指令主要是用來作為通訊 tongxu flag是用來握手協議開始標誌位 txkong flag是用來主模組串列埠1正在進行通訊 ...