共用方式為


本機和全域 MS-DOS 裝置名稱

Microsoft Windows 2000 和更新版本的 Windows NT 操作系統會維護 DosDevices 目錄的多個版本。

在這些操作系統上,有一個全域 \DosDevices 目錄和多個本機 \DosDevices 目錄。 全域 \DosDevices 目錄會保存全系統可見的 MS-DOS 裝置名稱。 本機 \DosDevices 目錄會保存只有特定本機 DosDevices 內容中可見的 MS-DOS 裝置名稱。

本機 DosDevices 內容如下所示。

  • 在 Windows XP 和更新版本上,每個登入會話都有自己的本機 DosDevices 內容。 系統線程,以及任何以 LocalSystem 使用者身分執行的線程,都不會在本機 DosDevices 內容中執行。

  • 在 Windows 2000 上,每個終端機伺服器會話都有自己的本機 DosDevices 內容。 在主控台會話中執行的任何線程都不會在本機 DosDevices 內容中執行。

每個線程都有目前的 DosDevices 內容,可在線程的存留期內變更。 未在本機 DosDevices 內容中執行的線程據說是在全域 DosDevices 內容執行。 因此,系統帳戶會在全域 DosDevices 內容中執行。

如果線程目前正在本機 DosDevices 內容中執行,則只會在本機 DosDevices 目錄中建立它所建立的任何 MS-DOS 裝置名稱。 因此,在本機 DosDevices 內容中執行的線程不會影響在另一個本機 DosDevices 內容或全域 DosDevices 內容中執行的線程可以看到的 MS-DOS 裝置名稱。 例如,如果 Windows XP 或更新版本上的使用者將網路驅動器機掛接為 X:,這不會影響 X:對於任何其他使用者或整體系統的意義。

在 Windows XP 和更新版本上,當物件管理員在 \DosDevices 中查閱名稱時,它會先搜尋本機 \DosDevices 目錄,然後搜尋全域 \DosDevices 目錄。 如果名稱存在於這兩個位置,本機名稱就會遮蔽全域名稱。

在 Windows 2000 上,每當起始新的終端機伺服器會話時,系統會複製全域 \DosDevices 目錄來建置本機 \DosDevices 目錄。 全域目錄的任何後續變更都不會傳播到本機目錄。

必須在全域 \DosDevices 目錄中建立其 MS-DOS 裝置名稱的驅動程式,可以在保證在系統線程內容中執行的標準驅動程式例程中建立其符號連結,例如 DriverEntry。 或者,全域 \DosDevices 目錄可作為 \DosDevices\Global;驅動程式可以使用 \DosDevices\Global\DosDeviceName 的名稱來指定全域目錄中的名稱。

請注意,\DosDevices\Global 不存在於不支援 \DosDevices 本機和全域版本的平臺上,例如 Windows 98/Me。 下列程式代碼範例會建立可在 Windows 98/Me 及 Windows 2000 和更新版本的作業系統上運作的全域符號連結:

UNICODE_STRING deviceName; // Already initialized.
UNICODE_STRING symbolicLinkName; // Initializing below.
NTSTATUS status;

if (IoIsWdmVersionAvailable(1, 0x10)) {
    // We're on Windows 2000 or later, so we use \DosDevices\Global.
 
    RtlInitUnicodeString(&symbolicLinkName, L"\\DosDevices\\Global\\SymbolicLinkName");

} else {
    // Windows 98/Me.  We just use DosDevices.
 
    RtlInitUnicodeString(&symbolicLinkName, L"\\DosDevices\\SymbolicLinkName");
}

status = IoCreateSymbolicLink(&symbolicLinkName, &deviceName);
if (!NT_SUCCESS(status)) {
  /* Symbolic link creation failed.  Handle error appropriately. */
}

驅動程式可以在本機 \DosDevices 目錄中建立 MS-DOS 裝置名稱,方法是建立符號連結以回應 IOCTL。 當特定本機 DosDevices 內容中的線程傳送 IOCTL 時,會從目前的線程內容中呼叫驅動程式的 DispatchDeviceControl

如需標準驅動程式例程執行之內容的詳細資訊,請參閱 分派例程和 IRQL

系統會區分本機 \DosDevices 目錄,如下所示:

  • 在 Windows XP 和更新版本上,本機 \DosDevices 目錄是由登入會話存取令牌的 AuthenticationID 所識別。 如需 AuthenticationID 的詳細資訊,請參閱 Microsoft Windows SDK 檔中TOKEN_STATISTICS結構的描述

  • 在 Windows 2000 上,終端伺服器會話的 SessionId 會識別本機 \DosDevices 目錄。 如需 SessionId 的詳細資訊,請參閱 Windows SDK 檔中WTS_SESSION_INFO結構的描述

Windows NT 4.0 Terminal Server Edition 支援與 Windows 2000 完全相同的本機 \DosDevices 目錄。