定義 MS-DOS 裝置名稱

MS-DOS 裝置名稱是指向 MS-DOS 裝置路徑的連接點。 這些連接點構成 MS-DOS 裝置命名空間。 呼叫 DefineDosDeviceSetVolumeMountPoint 函式來建立和修改這些連接點。 DeleteVolumeMountPoint 會刪除 SetVolumeMountPoint所建立的連接點, 而 DefineDosDevice 會刪除它建立的連接點。

定義 MS-DOS 裝置名稱之後,所有進程都會看到它。

  • Windows 會透過驗證識別碼來識別所有 MS-DOS 裝置。 驗證識別碼是 LUID (建立時與每個登入會話相關聯的本機唯一識別碼) 。
  • MS-DOS 裝置名稱的可見度會分類為全域或本機,並藉由將其包含在全域 MS-DOS 裝置和本機 MS-DOS 裝置命名空間中來定義。 全域命名空間中的 MS-DOS 裝置內容可由所有使用者存取,而 Local 命名空間中 MS-DOS 裝置的內容只能由存取權杖包含與該本機 MS-DOS 裝置命名空間相關聯的 AuthenticationID 的使用者存取。

多個本機 MS-DOS 裝置命名空間,而且一部電腦上一次只能存在一個全域 MS-DOS 裝置命名空間。

請注意,只有在 LocalSystem 內容中執行的處理常式可以呼叫 DefineDosDevice ,在全域 MS-DOS 裝置命名空間中建立 MS-DOS 裝置。 此外,移除該 AuthenticationID 的最後一個參考時,會刪除對應至特定 AuthenticationID 的本機 MS-DOS 裝置命名空間。

當您的程式碼藉由呼叫 QueryDosDevice來查詢現有的 MS-DOS 裝置名稱時,它會先搜尋本機 MS-DOS 裝置命名空間。 如果找不到該函式,函式就會搜尋全域 MS-DOS 裝置命名空間。 當您的程式碼透過此函式查詢所有現有的 MS-DOS 裝置名稱時,傳回的名稱清單取決於它是否在 LocalSystem 內容中執行。 如果是,則只會傳回全域 MS-DOS 裝置命名空間中包含的 MS-DOS 裝置名稱。 如果沒有,則會傳回全域和本機 MS-DOS 裝置命名空間中的裝置名稱串連。 如果這兩個命名空間中有裝置名稱, QueryDosDevice 會傳回本機 MS-DOS 裝置命名空間中的專案。 這也適用于 GetLogicalDrivesGetLogicalDriveStrings傳回的所有 MS-DOS 裝置名稱清單。

請注意,可能會發生下列情況:

  1. 未在 LocalSystem 內容中執行的使用者 A 會在對應的本機 MS-DOS 裝置命名空間中建立裝置名稱,且該裝置名稱不存在於全域 MS-DOS 裝置命名空間中。
  2. 在 LocalSystem 內容中執行的使用者 B 會在全域 MS-DOS 裝置命名空間中建立相同的裝置名稱。

在此案例中,使用者 A 將無法存取全域 MS-DOS 裝置命名空間中的裝置名稱,直到他移除或重新命名其本機 MS-DOS 裝置命名空間中的裝置名稱為止。 若要降低發生此案例的可能性,應該在以 C: 開頭的全域 MS-DOS 裝置命名空間中配置 MS-DOS 磁碟機號,並以 Z:結尾。 在本機 MS-DOS 裝置命名空間中配置 MS-DOS 磁碟機號時,應該反轉此順序。

如果您未在 LocalSystem 內容中執行,如果本機或全域 MS-DOS 裝置命名空間中已有該裝置名稱, DefineDosDevice 將無法讓您在本機 MS-DOS 裝置命名空間中定義裝置名稱。 在呼叫DefineDosDevice 之前呼叫 QueryDosDevice,以判斷您想要定義的裝置名稱是否存在於 MS-DOS 裝置命名空間中。

命名檔案、路徑和命名空間