裝置擴充套件 DEVICE EXTENSION

2022-02-03 21:35:19 字數 991 閱讀 9611

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函式的引數。

在驅動程式中應該盡量避免使用全域性變數,因為全域性變數會導致不同步的問題,解決辦法之一就是可將全域性變數儲存在裝置擴充套件中,將其作為乙個區域性變數來使用。

磁碟備份裝置將如何擴充套件?

大多數組織最終都將用完備份儲存,因此了解備份儲存規模對於建立長期資料保護策略至關重要。它並不只是轉換為橫向擴充套件架構那麼簡單,因為重複資料刪除會增加一層複雜性,從而使擴大橫向擴充套件規模更具挑戰性。縱向擴充套件架構 備份裝置中最常用的方法是縱向擴充套件方法。縱向擴充套件備份裝置由通常執行某些版本的...

WDM中的結構 4 裝置擴充套件

wdm中的結構 裝置擴充套件 裝置擴充套件 device extension 是與裝置物件相關的另一種重要的資料結構。可以用它來儲存與特定裝置關聯的資訊。裝置擴充套件其實只是乙個未分頁的池,由驅動開發者來定義它的大小和內容。並由i o管理器自動把它分配給裝置物件,即裝置物件的pvoid device...

NT裝置擴充套件 在WDF中的使用方式

typedef struct driver context driver context,pdriver context 申明乙個函式getdrivercontext,用於訪問該結構 在wdf驅動中必須這樣做 訪問方式下面介紹 wdf declare context type with name d...