windows下的設備是以"\Device\[設備名]”形式命名的。
例如磁盤分區的C盤,D盤的設備名稱就是
"\Device\HarddiskVolume2” "\Device\HarddiskVolume3”。
也可以不指定設備名稱,那么I/O管理器會自動分配一個數字作為設備的名稱。例如
"\Device\00000001"
設備名不容易記憶。
在驅動程序中,定義設備對象名稱需要以L"\\device\\"開頭,
定義符號鏈接的名稱需要以L"\\dosDevices\\"開頭,(注意dosDevices中的最后一個字符是s,然后IoCreateSymbolicLink函數返回失敗,半天找不到原因);
或者以L"\\??\\"開頭也可以。
符號鏈接可以理解為設備的別名,更重要的是,設備名只能被內核模式下的其他驅動所識別,而別名可以被用戶模式下的應用程序識別。“C:”就是一個符號鏈接名。
而在驅動中,符號鏈接名是這樣寫的:
L”\\??\\c:” ---> \??\c:
L"\\??\\HelloDDK" --->\??\HelloDDK
L”\\DosDevices\\HelloDDK” ---> \DosDevices\HelloDDK
在內核模式下,符號鏈接是以“\??\”開頭的,如C盤就是"\??\C:",
在用戶模式下,符號鏈接是以“\\.\”開頭的,如C盤就是"\\.\C:".
因此在應用程序中,符號鏈接名:
L"\\\\.\\HelloDDK"-->\\.\HelloDDK