定義 MS-DOS 裝置名稱
MS-DOS 裝置名稱是指向 MS-DOS 裝置路徑的連接點。 這些連接點構成 MS-DOS 裝置命名空間。 呼叫 DefineDosDevice 和 SetVolumeMountPoint 函式來建立和修改這些連接點。 DeleteVolumeMountPoint 會刪除由 SetVolumeMountPoint 所建立的連接點,DefineDosDevice 刪除它建立的連接點。
定義 MS-DOS 裝置名稱之後,所有進程仍會顯示該名稱。
- Windows 會透過驗證標識碼來識別所有 MS-DOS 裝置。 驗證 ID 是在建立時與每次登入會話相關聯的 LUID(本機唯一標識符)。
- MS-DOS 裝置名稱的可見性分類為全域或本機,其定義取決於是否包含在全域 MS-DOS 裝置和本機 MS-DOS 裝置命名空間中。 全域命名空間中 MS-DOS 裝置的內容可由所有使用者存取,而本機命名空間中 MS-DOS 裝置的內容只能由存取令牌包含與該本機 MS-DOS 裝置命名空間相關聯的 AuthenticationID 的使用者存取。
多個本機 MS-DOS 裝置命名空間,但在同一時間和同一部機器上只能有一個全域 MS-DOS 裝置命名空間。
請注意,只有 LocalSystem 內容中執行的進程可以呼叫 DefineDosDevice,以在 Global MS-DOS 裝置命名空間中建立 MS-DOS 裝置。 此外,當移除某個 AuthenticationID 的最後一個參考時,會刪除與該特定 AuthenticationID 對應的本機 MS-DOS 裝置命名空間。
當您的程式代碼藉由呼叫 QueryDosDevice來查詢現有的 MS-DOS 裝置名稱時,它會先搜尋 Local MS-DOS Device 命名空間。 如果找不到該函式,則函式會搜尋全域 MS-DOS 裝置命名空間。 當您的程式代碼透過此函式查詢所有現有的 MS-DOS 裝置名稱時,傳回的名稱清單取決於它是否在 LocalSystem 內容中執行。 如果是,則只會傳回全域 MS-DOS 裝置命名空間中包含的 MS-DOS 裝置名稱。 如果沒有,則會傳回 Global 和 Local MS-DOS Device 命名空間中的裝置名稱串連。 如果在這兩個命名空間中都存在相同的裝置名稱,QueryDosDevice 將會傳回 Local MS-DOS Device 命名空間中的條目。 這也適用於由 getLogicalDrives 和 GetLogicalDriveStrings傳回的所有 MS-DOS 裝置名稱清單。
請注意,可能會發生下列情況:
- 使用者 A 未在 LocalSystem 內容中執行,會在對應的 Local MS-DOS Device 命名空間中建立裝置名稱,且該裝置名稱不存在於 Global MS-DOS Device 命名空間中。
- 在 LocalSystem 內容中執行的使用者 B 會在 Global MS-DOS Device 命名空間中建立相同的裝置名稱。
在此案例中,使用者 A 將無法存取 Global MS-DOS Device 命名空間中的裝置名稱,直到他或她移除或重新命名其本機 MS-DOS 裝置命名空間中的裝置名稱為止。 若要降低發生此情境的可能性,MS-DOS 驅動器字元應在全域 MS-DOS 裝置命名空間中分配,從 C: 開始到 Z: 結束。 此順序應該針對本機 MS-DOS 裝置命名空間中的 MS-DOS 驅動器號配置反轉。
如果您不是在 LocalSystem 環境中運行,DefineDosDevice 不會允許您在 Local MS-DOS Device 命名空間中定義裝置名稱,若該裝置名稱已在本機或全域 MS-DOS 裝置命名空間中存在。 呼叫 QueryDosDevice,再呼叫 DefineDosDevice,以判斷您想要定義的裝置名稱是否存在於您的 MS-DOS Device 命名空間中。
相關主題