Udostępnij przez


Lokalne i globalne nazwy urządzeń MS-DOS

System Operacyjny Microsoft Windows 2000 i nowsze wersje systemu operacyjnego Windows NT obsługują wiele wersji katalogu DosDevices .

W tych systemach operacyjnych istnieje jeden katalog global\DosDevices i wiele katalogów local\DosDevices . Globalny katalog \DosDevices zawiera nazwy urządzeń MS-DOS, które są widoczne dla całego systemu. Lokalny katalog \DosDevices zawiera MS-DOS nazwy urządzeń, które są widoczne tylko w lokalnymkontekścieDosDevices.

Lokalne konteksty DosDevices są następujące.

  • W systemie Windows XP lub nowszym każda sesja logowania ma własny lokalny kontekst DosDevices . Wątki systemowe i każdy wątek działający jako użytkownik LocalSystem nie działają w lokalnym kontekście DosDevices.

  • W systemie Windows 2000 każda sesja serwera terminali ma własny lokalny kontekst DosDevices . Każdy wątek uruchomiony w ramach sesji konsoli nie jest uruchamiany w lokalnym kontekście DosDevices .

Każdy wątek ma bieżący kontekst DosDevices , który może ulec zmianie w okresie istnienia wątku. Wątek, który nie działa w lokalnym kontekście DosDevices, uważa się, że działa w globalnymkontekścieDosDevices. W związku z tym konto systemowe jest uruchamiane w globalnym kontekście DosDevices .

Jeśli wątek jest obecnie uruchomiony w lokalnym kontekście DosDevices, wszystkie nazwy urządzeń MS-DOS, które tworzy, są tworzone tylko w lokalnym katalogu DosDevices. W związku z tym wątki uruchomione w lokalnym kontekście DosDevices nie mogą mieć wpływu na nazwy urządzeń MS-DOS widoczne dla wątków uruchomionych w innym lokalnym kontekście DosDevices lub w kontekście globalnych urządzeń DosDevices . Jeśli na przykład użytkownik w systemie Windows XP lub nowszym instaluje dysk sieciowy jako X:, nie ma to wpływu na znaczenie X: dla żadnego innego użytkownika lub całego systemu.

W systemie Windows XP lub nowszym, gdy menedżer obiektów wyszukuje nazwę w \DosDevices, najpierw wyszukuje lokalny katalog \DosDevices , a następnie globalny katalog \DosDevices . Jeśli nazwa istnieje w obu miejscach, nazwa lokalna cieniuje nazwę globalną.

W systemie Windows 2000 po zainicjowaniu nowej sesji serwera terminali system tworzy lokalny katalog \DosDevices , kopiując globalny katalog \DosDevices . Wszelkie kolejne zmiany w katalogu globalnym nie są propagowane do katalogu lokalnego.

Sterownik, który musi utworzyć jego MS-DOS nazwy urządzeń w globalnym katalogu \DosDevices , może to zrobić, tworząc jego linki symboliczne w standardowej procedurze sterownika, która ma gwarancję uruchomienia w kontekście wątku systemowego, takiego jak DriverEntry. Alternatywnie globalny katalog \DosDevices jest dostępny jako \DosDevices\Global; sterowniki mogą używać nazwy \DosDevices\Global\DosDeviceName , aby określić nazwę w katalogu globalnym.

Należy pamiętać, że \DosDevices\Global nie istnieje na platformach, które nie obsługują wersji lokalnych i globalnych \DosDevices, takich jak Windows 98/Me. Poniższy przykład kodu tworzy globalny link symboliczny, który działa w systemie Windows 98/Me, a także w systemach operacyjnych Windows 2000 i nowszych:

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. */
}

Sterownik może utworzyć nazwę urządzenia MS-DOS w lokalnym katalogu \DosDevices, tworząc łącze symboliczne w odpowiedzi na żądanie IOCTL. Gdy wątek w określonym lokalnym kontekście DosDevices wysyła IOCTL, sterownik DispatchDeviceControl jest wywoływany z bieżącego kontekstu wątku.

Aby uzyskać więcej informacji na temat kontekstu, w którym jest uruchamiana standardowa procedura sterownika, zobacz Dispatch Routines and IRQLs (Wysyłanie procedur i list IRQLs).

System rozróżnia lokalne katalogi \DosDevices w następujący sposób:

  • W systemie Windows XP lub nowszym lokalne katalogi \DosDevices są identyfikowane przez identyfikator AuthenticationID tokenu dostępu sesji logowania. Aby uzyskać więcej informacji na temat identyfikatora AuthenticationID, zobacz opis struktury TOKEN_STATISTICS w dokumentacji zestawu Microsoft Windows SDK.

  • W systemie Windows 2000 lokalne katalogi \DosDevices są identyfikowane przez sessionId sesji serwera terminali. Aby uzyskać więcej informacji na temat identyfikatora SessionId, zobacz opis struktury WTS_SESSION_INFO w dokumentacji zestawu Windows SDK.

System Windows NT 4.0 Terminal Server Edition obsługuje lokalne katalogi \DosDevices w dokładnie taki sam sposób jak windows 2000.