Nama Perangkat MS-DOS Lokal dan Global
Versi Microsoft Windows 2000 dan yang lebih baru dari sistem operasi berbasis Windows NT mempertahankan beberapa versi direktori DosDevices .
Pada sistem operasi ini, ada satu direktori \DosDevices global dan beberapa direktori \DosDevices lokal. Direktori \DosDevices global menyimpan nama perangkat MS-DOS yang terlihat di seluruh sistem. Direktori \DosDevices lokal menyimpan nama perangkat MS-DOS yang hanya terlihat dalam konteks DosDevices lokal tertentu.
Konteks DosDevices lokal adalah sebagai berikut.
Pada Windows XP dan yang lebih baru, setiap sesi masuk memiliki konteks DosDevices lokalnya sendiri. Utas sistem, dan utas apa pun yang berjalan sebagai pengguna LocalSystem, tidak berjalan dalam konteks DosDevices lokal.
Pada Windows 2000, setiap sesi server terminal memiliki konteks DosDevices lokalnya sendiri. Utas apa pun yang berjalan sebagai bagian dari sesi konsol tidak berjalan dalam konteks DosDevices lokal.
Setiap utas memiliki konteks DosDevices saat ini , yang dapat berubah selama masa pakai utas . Utas yang tidak berjalan dalam konteks DosDevices lokal dikatakan berjalan dalam konteks DosDevices global. Dengan demikian, akun sistem berjalan dalam konteks DosDevices global.
Jika utas saat ini berjalan dalam konteks DosDevices lokal, nama perangkat MS-DOS apa pun yang dibuatnya hanya dibuat di direktori DosDevices lokal. Dengan demikian, utas yang berjalan dalam konteks DosDevices lokal tidak dapat memengaruhi nama perangkat MS-DOS yang terlihat oleh utas yang berjalan dalam konteks DosDevices lokal lain atau dalam konteks DosDevices global. Misalnya, jika pengguna di Windows XP atau yang lebih baru memasang drive jaringan sebagai X:, ini tidak memengaruhi arti X: untuk pengguna lain, atau untuk sistem secara keseluruhan.
Pada Windows XP dan yang lebih baru, ketika manajer objek mencari nama di \DosDevices, pertama-tama mencari direktori \DosDevices lokal, lalu direktori \DosDevices global. Jika nama ada di kedua tempat, nama lokal akan membayangi nama global.
Pada Windows 2000, setiap kali sesi server terminal baru dimulai, sistem membangun direktori \DosDevices lokal dengan menyalin direktori \DosDevices global. Setiap perubahan berikutnya pada direktori global tidak disebarluaskan ke direktori lokal.
Driver yang harus membuat nama perangkat MS-DOS-nya di direktori \DosDevices global dapat melakukannya dengan membuat tautan simbolisnya dalam rutinitas driver standar yang dijamin berjalan dalam konteks utas sistem, seperti DriverEntry. Atau, direktori \DosDevices global tersedia sebagai \DosDevices\Global; driver dapat menggunakan nama \DosDevices\Global\DosDeviceName untuk menentukan nama di direktori global.
Perhatikan bahwa \DosDevices\Global tidak ada di platform yang tidak mendukung \DosDevices versi lokal dan global, seperti Windows 98/Me. Contoh kode berikut membuat tautan simbolis global yang berfungsi pada Windows 98/Me serta sistem operasi Windows 2000 dan yang lebih baru:
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. */
}
Driver dapat membuat nama perangkat MS-DOS di direktori \DosDevices lokal dengan membuat tautan simbolis sebagai respons terhadap IOCTL. Ketika utas dalam konteks DosDevices lokal tertentu mengirim IOCTL, DispatchDeviceControl driver dipanggil dari dalam konteks utas saat ini.
Untuk informasi selengkapnya tentang konteks di mana rutinitas driver standar berjalan, lihat Dispatch Routines dan IRQL.
Sistem membedakan direktori \DosDevices lokal sebagai berikut:
Pada Windows XP dan yang lebih baru, direktori \DosDevices lokal diidentifikasi oleh AuthenticationID untuk token akses sesi masuk. Untuk informasi selengkapnya tentang AuthenticationID, lihat deskripsi struktur TOKEN_STATISTICS dalam dokumentasi Microsoft Windows SDK.
Pada Windows 2000, direktori \DosDevices lokal diidentifikasi oleh SessionId untuk sesi server terminal. Untuk informasi selengkapnya tentang SessionId, lihat deskripsi struktur_SESSION_INFO dalam dokumentasi Windows SDK.
Windows NT 4.0 Terminal Server Edition mendukung direktori \DosDevices lokal dengan cara yang sama persis dengan Windows 2000.