Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Microsoft Windows 2000 och senare versioner av det Windows NT-baserade operativsystemet har flera versioner av DosDevices-katalogen .
På dessa operativsystem finns det en global\DosDevices-katalog och flera lokala\DosEnhetskataloger . Katalogen global \DosDevices innehåller MS-DOS enhetsnamn som är synliga i hela systemet. En lokal \DosDevices-katalog innehåller MS-DOS enhetsnamn som endast visas i en viss lokalDosEnhetskontext.
De lokala DosDevices-kontexterna är följande.
I Windows XP och senare har varje inloggningssession en egen lokal DosDevices-kontext . Systemtrådar och alla trådar som körs som LocalSystem-användare ska inte köras i en lokal DosDevices-kontext .
I Windows 2000 har varje terminalserversession en egen lokal DosDevices-kontext . Alla trådar som körs som en del av konsolsessionen körs inte i en lokal DosDevices-kontext .
Varje tråd har en aktuell DosDevices-kontext , som kan ändras under en tråds livslängd. En tråd som inte körs i en lokal DosDevices-kontext sägs köras i den globalaDosDevices-kontexten. Därför körs systemkontot i den globala DosDevices-kontexten .
Om en tråd för närvarande körs i en lokal DosDevices-kontext skapas alla MS-DOS enhetsnamn som den skapar endast i den lokala DosDevices-katalogen . Därför kan trådar som körs i en lokal DosDevices-kontext inte påverka MS-DOS enhetsnamn som är synliga för trådar som körs i en annan lokal DosDevices-kontext eller i den globala DosDevices-kontexten . Om till exempel en användare på Windows XP eller senare monterar en nätverksenhet som X:, påverkar detta inte innebörden av X: för någon annan användare eller för systemet som helhet.
I Windows XP och senare, när objekthanteraren letar upp ett namn i \DosDevices, söker den först igenom den lokala katalogen \DosDevices och sedan katalogen global \DosDevices . Om namnet finns på båda platserna skuggar det lokala namnet det globala namnet.
I Windows 2000, när en ny terminalserversession initieras, skapar systemet den lokala katalogen \DosDevices genom att kopiera katalogen global \DosDevices . Efterföljande ändringar i den globala katalogen sprids inte till den lokala katalogen.
En drivrutin som måste skapa sina MS-DOS enhetsnamn i katalogen global \DosDevices kan göra det genom att skapa sina symboliska länkar i en standarddrivrutin som garanterat körs i en systemtrådskontext, till exempel DriverEntry. Alternativt är katalogen global \DosDevices tillgänglig som \DosDevices\Global; drivrutiner kan använda namnet \DosDevices\Global\DosDeviceName för att ange ett namn i den globala katalogen.
Observera att \DosDevices\Global inte finns på plattformar som inte stöder lokala och globala versioner av \DosDevices, till exempel Windows 98/Me. I följande kodexempel skapas en global symbolisk länk som fungerar på Windows 98/Me samt Windows 2000 och senare operativsystem:
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. */
}
En drivrutin kan skapa MS-DOS-enhetsnamn i en lokal \DosDevices-katalog genom att skapa en symbolisk länk som svar på en IOCTL. När en tråd i en viss lokal DosDevices-kontext skickar IOCTL anropas drivrutinens DispatchDeviceControl inifrån den aktuella trådkontexten.
Mer information om kontexten där en standarddrivrutin körs finns i Dispatch Routines and IRQLs (Dispatch Routines and IRQLs).
Systemet särskiljer lokala \DosEnhetskataloger på följande sätt:
I Windows XP och senare identifieras lokala \DosEnhetskataloger av AuthenticationID för inloggningssessionens åtkomsttoken. Mer information om AuthenticationID finns i beskrivningen av TOKEN_STATISTICS-strukturen i Microsoft Windows SDK-dokumentationen.
I Windows 2000 identifieras lokala \DosDevices-kataloger av SessionId för terminalserversessionen. Mer information om SessionId finns i beskrivningen av WTS_SESSION_INFO-strukturen i Windows SDK-dokumentationen.
Windows NT 4.0 Terminal Server Edition stöder lokala \DosEnhetskataloger på exakt samma sätt som Windows 2000.