Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.