toaster
例子閱讀(一)
1、i/o
管理器(
根匯流排)
為匯流排生成並維護
pdo,匯流排驅動為插入的裝置生成並維護
pdo(
即下層裝置驅動為上層裝置生成並維護
pdo);
驅動程式中的
adddevice
例程接受的引數
physicaldeviceobject
就是下層裝置為其生成的
pdo,
adddevice
例程create
的只能是該裝置的
fdo。
2、匯流排驅動發現新裝置插入後,通過呼叫
ioinvalidatedevicerelations
告訴pnp
管理器busrelations改變(
注意:ioinvalidatedevicerelations
中傳入的
deviceobject
是匯流排的
pdo)
;pnp
管理器傳送
irp_mn_query_device_relations
查詢busrelations
,此時匯流排裝置的
fdo為新裝置生成
pdo,並報告。
btw:toaster
匯流排驅動是在發現新裝置插入後就生成子
pdo,然後通知
pnp管理器;然後
pnp管理器進行查詢。這與
ddk中說明不一致,可能無關緊要??
3、當unplug
動作發生時,如同
plug
動作發生,匯流排驅動(其
fdo)
通過呼叫
ioinvalidatedevicerelations
告訴i/o
管理器busrelations改變(
注意:ioinvalidatedevicerelations
中傳入的
deviceobject
是匯流排的
pdo,不是此時
unplug
的裝置pdo
) 4、
當裝置發生
eject
動作時,匯流排驅動(其
fdo)
通過呼叫
iorequestdeviceeject
告訴i/o
管理器,此時
iorequestdeviceeject
的引數physicaldeviceobject
是該裝置的
pdo。
5、匯流排驅動程式需要處理兩類
pnp事件,一類發給匯流排
fdo的
pnp事件,一類是匯流排驅動為插入的裝置生成的
pdo的
pnp事件。對於發給匯流排
fdo的
pnp事件,一般都需要繼續下傳,而對於發給為插入的裝置生成的
pdo的
pnp事件則
iocompleterequest
。 6、
每乙個裝置都有乙個裝置堆疊,在該裝置堆疊裡,代表該裝置的
pdo永遠都處於最底層。匯流排的
pdo與在匯流排上的裝置
pdo沒有層次關係
。但是匯流排驅動程式負責生成其發現的裝置的
pdo,裝置提供商提供的驅動程式主要是該裝置的
fdo,
fdo進行資料傳輸
/功能作業時一般不需要與代表裝置的
pdo進行互動。
7、fido
都是相對
fdo而言,
upper fido
表明該fido
在裝置堆疊中處於
fdo的上面,
lower fido
表明該fido
在裝置堆疊中處於
fdo的下面;但所有的一切都處於
pdo的上面。
8、pnp
管理器不保證裝置堆疊中的驅動載入順序,但是它保證了呼叫
adddevice
的順序來確保
stack
的正確。
9、如果裝置處於
raw狀態,則它的裝置堆疊裡只有
pdo與匯流排驅動生成的
fido
Asymptote 學習記錄 2 例子閱讀
學習程式設計的乙個有效方式是去讀別人寫的 我學習了這裡的 雖多,但是簡單.如下 稍微做了修改 import settings pdfviewer usr bin okular outformat pdf size 400 texpreamble usepackage atbegindocument ...
Asymptote 學習記錄 2 例子閱讀
學習程式設計的乙個有效方式是去讀別人寫的 我學習了這裡的 雖多,但是簡單.如下 稍微做了修改 import settings pdfviewer usr bin okular outformat pdf size 400 texpreamble usepackage atbegindocument ...
遞迴例子(一)
1.場景 給定乙個字串,將裡面的內容進行組合成指定位數的結果。並且統計個數。比如 abc 組合2位數的個數有3 3 3 9 結果是aa,ab,ac,ba,bb,bc,ca,cb,cc 實現 public int print string s,int figure,string cs,int csum...