符號鏈結與裝置介面名

2021-07-28 13:44:37 字數 2057 閱讀 9394

符號鏈結和裝置物件一樣,也是核心物件的一種。呼叫wdfdevicecreatesymboliclink建立符號鏈結,其引數是裝置控制代碼和符號鏈結名。系統將因此建立乙個符號鏈結核心物件,並指向裝置控制代碼送代表的裝置物件的名稱——–這和檔案系統中的「快捷方式」本質上很像。

//建立符號鏈結,應用程式根據符號鏈結檢視並使用核心裝置

//除了建立符號鏈結外,更好的方法是使用wdfdevicecreatedeviceinte***ce建立裝置介面

//裝置介面能保證名字不會衝突,但不具有可讀性,所以仍採用符號鏈結形式

nlen=wcslen(wcsdosdevicename);

wcsdosdevicename[nlen-1]+=ninstance;

status=wdfdevicecreatesymboliclink(device,&dosdevicename);

裝置介面也是符號鏈結,但命名方式更複雜。它首先根據介面guid為裝置建立介面類(如果已存在則不會建立),然後在介面類下建立介面例項。在驅動程式中建立裝置介面和建立符號鏈結,有乙個非常明顯的區別:符號鏈結的目標物件是功能裝置物件,而裝置介面的目標物件是物理裝置物件(二者位於同乙個裝置棧)。

guid能最大限度地保證唯一性。另外,裝置介面還具有乙個特點,即可以被啟動和禁止。這樣,裝置介面具有三個優點:第一,具有com介面屬性,可以通過com介面方式引用;第二,核心驅動加強了對暴露給使用者程式的裝置介面的管理,可以隨時啟用、禁止;第三,由於是基於guid的,因此再多的裝置介面也不怕重名。

這裡多說一句:很多人在談到符號鏈結和裝置介面的區別時會說到一點,就是符號鏈結名是程式設計師想出來的「可讀名稱」,容易重名。這自然是乙個事實,但其實並不能將此作為乙個很重要的區別或缺點。檔案系統中存在的所有檔案,都是使用者可讀的,難道因此要把這些檔名用guid來代替?

呼叫wdfdevicecreatedeviceinte***ce完成介面建立

ntstatus wdfdevicecreatedeviceinte***ce(

in wdfdevice device, //框架裝置物件控制代碼

in const guid* inte***ceclassguid //介面類guid,此guid若不存在,將被建立

in optional pcunicode_string referencestring //引用字串,將和類guid一起組合到被建立的介面名稱中

這個函式被呼叫時,系統會首先到登錄檔中檢查inte***ceclassguid所代表的介面類是否已註冊,如果沒有註冊就先註冊;然後在這個介面類下建立乙個裝置介面例項,這個介面例項名稱到底什麼樣子由系統說了算,但可以確定的是,這個名稱包含了三部分內容:介面類guid(字串)、可選的引用字串,以及裝置id的一部分。

首先定義乙個guid,可以使用guid generator工具。如:

guid deviceinte***ce = ;

然後開始建立裝置介面:

//wdfdevicecreatedeviceinte***ce需設定乙個引用字串,內容隨便用來將同乙個介面類中的多個裝置介面區別開

nlen = wcslen(wcsrefstring);

wcsrefstring[nlen-1]+=ninstance;

//建立裝置介面例項

status = wdfdevicecreatedeviceinte***ce(device,

&deviceinte***ce,

&refstring);

//下面獲取系統為這個介面例項賦予的符號鏈結名

if(nt_success(status))

status=wdfdeviceretrievedeviceinte***cestring(device,

&deviceinte***ce,

&refstring,

string);

if(status==status_success)

unicode_string name;

wdfstringgetunicodestring(string,&name);

kdbg(dpfltr_info_level,」inte***ce name: %wz」,&name);

Windows驅動開發 符號鏈結和裝置名

windows下的裝置是以 device 裝置名 形式命名的。例如磁碟分割槽的c盤,d盤的裝置名稱就是 device harddiskvolume2 device harddiskvolume3 也可以不指定裝置名稱,那麼i o管理器會自動分配乙個數字作為裝置的名稱。例如 device 000000...

硬鏈結與符號鏈結

索引節點 inode 要 了解鏈結,我們首先得了解乙個概念,叫索引節點 inode 在linux系統中,核心為每乙個新建立的檔案分配乙個inode 索引結點 每個檔案 都有乙個惟一的inode號,我們可以將inode簡單理解成乙個指標,它永遠指向本檔案的具體儲存位置。檔案屬性儲存在索引結點裡,在訪問...

硬鏈結與符號鏈結

乙個inode節點可以存在任意數目的硬鏈結。在刪除硬鏈結時,該inode節點上的資料上的資料將不會受到影響。在linux系統中可以使用ln命令來建立硬鏈結。首先用touch命令建立名為link.test的檔案。然後,輸入 ln link.test link 命令,這時就建立了指向link.test的...