wdm中的結構
---裝置擴充套件
裝置擴充套件(device_extension)是與裝置物件相關的另一種重要的資料結構。可以用它來儲存與特定裝置關聯的資訊。裝置擴充套件其實只是乙個未分頁的池,由驅動開發者來定義它的大小和內容。並由i/o管理器自動把它分配給裝置物件,即裝置物件的pvoid deviceextension欄位。由於此結構是驅動開發者自定義的,所以必須要讓系統知道需要給此結構預留多少空間,因此要把裝置擴充套件結構的大小作為引數傳遞給iocreatedevice
函式。i/o管理器的iocreatedevice
函式將為裝置物件和裝置擴充套件物件在非分頁記憶體池內申請記憶體。
裝置擴充套件一般要包括裝置物件的反向指標、裝置狀態或驅動程式環境資訊等,它的布局類似於如下結構:
typedef struct tagdevice_extension device_extension, *pdevice_extension;
裝置擴充套件的內容依賴特定的驅動程式,應該根據驅動程式的需要來定義。
裝置擴充套件主要用來維護裝置狀態資訊、儲存驅動程式使用的核心物件或系統資源(如自旋鎖)、儲存驅動程式需要的資料等。由於大多數的匯流排驅動、功能驅動和過濾器驅動都要工作在任意執行緒上下文,即任意執行緒都可能成為當前執行緒,所以,裝置擴充套件是儲存裝置狀態資訊和資料的主要空間。
每乙個實現了isr的驅動程式都要儲存中斷物件(一種核心物件)指標,大部分的驅動程式把它們儲存在裝置擴充套件裡。每乙個標準的驅動程式函式在接收乙個irp時,同時接收到的還有乙個指向申請該io操作的裝置物件的指標,此函式能夠通過此指標訪問到相應的裝置擴充套件。
另外,上一層的裝置擴充套件都儲存乙個指向下一層裝置物件的指標(如上述結構中的pdevice_object lowerdeviceobject欄位)作為呼叫iocalldriver
函式的引數。
十三 結構型別(4) 結構中的結構
結構陣列 struct date dates 100 struct date dates 結構中的結構 struct dateandtime 巢狀的結構 struct point struct rectangle 如果有變數 struct rectangle r 就可以有 r.pt1.x,r.pt1...
NT裝置擴充套件 在WDF中的使用方式
typedef struct driver context driver context,pdriver context 申明乙個函式getdrivercontext,用於訪問該結構 在wdf驅動中必須這樣做 訪問方式下面介紹 wdf declare context type with name d...
裝置驅動中關鍵資料結構
1 file operations資料結構 核心內部通過file結構識別裝置,通過file operations資料結構提供檔案系統的入口點 函式。file operations定義在中的函式指標表。這個結構的每乙個成員的名字都對應著乙個系統呼叫。從某種意義上說,寫驅動程式的任務之一就是完成file...