Windows NT 裝置驅動程式開發基礎(5) (轉)
Windows NT 裝置驅動程式開發基礎(5) (轉)[@more@]1.3.6 緩衝的I/O與直接I/O
在建立了一個裝置後,可以透過設定Device的Flags域的值來將裝置設
置成緩衝的I/O或直接的I/O。
如果該值被設為DO_BUFFERED_IO,每當I/O管理器收到一個讀寫請求,就在的非分
頁區分配一塊與區大小相同的區域,並將首指標存放於Irp的AssociatedIrp.S
ystemBuffer中,驅動程式就透過這個緩衝區與使用者資料。每當一個讀請求被完成時
I/O管理器自動將該緩衝區中的內容複製到使用者區,並釋放該區域。
如果使用者區大於一頁(在80x86上為4096位元組),一般將該值設為DO_DIRECT_IO。
這時每當I/O管理器收到一個讀寫請求,先鎖定使用者區的實體記憶體,然後為其建立一個內
存描述表(MDL),並將該表的首指標存放於Irp物件的MdlAddress中,驅動程式可以透過
MmGetSystemAddresorMdl獲得使用者區在空間中的地址。每當一個讀請求被完
成時I/O管理器自動將該區域解鎖。
1.3.7 定時
為了防止當裝置出現某種故障時導致讀寫請求超時,或需要定時輪詢某些裝置的狀態
,驅動程式需要設定一些定時器。驅動程式中有兩種方法可以設定定時器。一種是呼叫
IoInitializeTimer將一個定時器過程IoTimer與一個裝置物件聯絡起來。在呼叫IoStar
tTimer後,系統將每一秒鐘呼叫一次IoTimer,直至驅動程式呼叫IoStopTimer。如果需
要設定更小間隔的定時器,需要用到被稱為CustomTimerDpc的一種推遲過程呼叫機制。
它可以設定系統每隔一定時間將一個設定好的DPC物件放到DPC佇列的末尾,一個指
定的定時器Dpc過程。這個時間間隔可以精確到100ns。
--
在建立了一個裝置後,可以透過設定Device的Flags域的值來將裝置設
置成緩衝的I/O或直接的I/O。
如果該值被設為DO_BUFFERED_IO,每當I/O管理器收到一個讀寫請求,就在的非分
頁區分配一塊與區大小相同的區域,並將首指標存放於Irp的AssociatedIrp.S
ystemBuffer中,驅動程式就透過這個緩衝區與使用者資料。每當一個讀請求被完成時
I/O管理器自動將該緩衝區中的內容複製到使用者區,並釋放該區域。
如果使用者區大於一頁(在80x86上為4096位元組),一般將該值設為DO_DIRECT_IO。
這時每當I/O管理器收到一個讀寫請求,先鎖定使用者區的實體記憶體,然後為其建立一個內
存描述表(MDL),並將該表的首指標存放於Irp物件的MdlAddress中,驅動程式可以透過
MmGetSystemAddresorMdl獲得使用者區在空間中的地址。每當一個讀請求被完
成時I/O管理器自動將該區域解鎖。
1.3.7 定時
為了防止當裝置出現某種故障時導致讀寫請求超時,或需要定時輪詢某些裝置的狀態
,驅動程式需要設定一些定時器。驅動程式中有兩種方法可以設定定時器。一種是呼叫
IoInitializeTimer將一個定時器過程IoTimer與一個裝置物件聯絡起來。在呼叫IoStar
tTimer後,系統將每一秒鐘呼叫一次IoTimer,直至驅動程式呼叫IoStopTimer。如果需
要設定更小間隔的定時器,需要用到被稱為CustomTimerDpc的一種推遲過程呼叫機制。
它可以設定系統每隔一定時間將一個設定好的DPC物件放到DPC佇列的末尾,一個指
定的定時器Dpc過程。這個時間間隔可以精確到100ns。
--
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992241/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Windows NT 裝置驅動程式開發基礎(1) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(3) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(2) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(4) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(7) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(6) (轉)Windows
- Windows NT 裝置驅動程式開發基礎(8) (轉)Windows
- DeviceDriver Windows NT 驅動程式型別 (轉載) (轉)devWindows型別
- SCO UNIX 下裝置驅動程式開發 (轉)
- SCO UNIX 下裝置驅動程式開發(轉)
- 使用Windows 95虛擬裝置驅動程式(VxD) (轉)Windows
- Windows95的裝置驅動程式的編寫 (轉)Windows
- Linux裝置驅動程式 (轉)Linux
- linux裝置驅動編寫基礎Linux
- 開發Linux系統裝置驅動程式並不難(轉)Linux
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- Windows裝置和驅動的安裝Windows
- Linux下的硬體驅動——USB裝置(下)(驅動開發部分)(轉)Linux
- LINUX下的裝置驅動程式 (轉)Linux
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- Linux驅動之裝置樹的基礎知識Linux
- 字元裝置驅動 —— 字元裝置驅動框架字元框架
- iOS 裝置驅動 for windows 32&64iOSWindows
- 《Linux裝置驅動開發詳解(第2版)》——第1章Linux裝置驅動概述及開發環境構建1.1裝置驅動的作用Linux開發環境
- Linux裝置驅動之字元裝置驅動Linux字元
- UNIX下裝置驅動程式的基本結構(轉)
- 基於匯流排裝置驅動模型的按鍵讀取驅動程式模型
- 在Linux中,什麼是裝置驅動程式?如何安裝和解除安裝裝置驅動程式?Linux
- Linux裝置驅動開發詳解:基於Linux4.0核心Linux
- 裝置驅動程式包可以刪除嗎 win10裝置驅動程式包能刪嗎Win10
- 裸裝置基礎知識(轉)
- 深入淺出:Linux裝置驅動之字元裝置驅動Linux字元
- 乾坤合一:Linux裝置驅動之塊裝置驅動Linux
- Windows的驅動開發模型Windows模型
- Windows驅動開發入門Windows
- 虛擬裝置驅動程式的設計與實現 (轉)
- 深入淺出分析Linux裝置驅動程式中斷(轉)Linux