符號鏈結和裝置物件一樣,也是核心物件的一種。呼叫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的...