Bagikan melalui


Dukungan untuk Penamaan dan MUP UNC

Artikel ini menjelaskan bagaimana pengalih jaringan dapat mendukung penamaan UNC dan Beberapa Penyedia UNC (MUP).

MUP adalah layanan Windows yang membantu menemukan sumber daya jaringan yang diidentifikasi menggunakan UNC (konvensi penamaan seragam). Ini adalah komponen mode kernel yang bertanggung jawab untuk menyalurkan semua akses sistem file jarak jauh menggunakan nama UNC ke pengalih jaringan (penyedia UNC) yang mampu menangani permintaan sistem file jarak jauh. MUP terlibat ketika aplikasi menggunakan jalur UNC; misalnya, perintah baris perintah seperti:

notepad \\server\public\readme.txt

MUP menerima perintah yang berisi nama UNC dari aplikasi. Ini mengirimkan nama ke setiap penyedia UNC terdaftar, stasiun kerja Lan Manager, dan lainnya yang diinstal. Ketika penyedia UNC mengidentifikasi nama UNC sebagai miliknya, MUP secara otomatis mengalihkan instans nama tersebut di masa mendatang ke penyedia tersebut.

MUP tidak terlibat selama operasi yang membuat huruf drive yang dipetakan (perintah "NET USE", misalnya). Operasi ini ditangani oleh beberapa router penyedia (MPR) dan DLL penyedia Windows Networking (WNet) mode pengguna untuk pengalihan jaringan. Namun, DLL penyedia WNet mode pengguna dapat berkomunikasi langsung dengan driver pengalih jaringan mode kernel selama operasi ini.

Sebelum Windows Vista, operasi file jarak jauh yang dilakukan pada drive yang dipetakan yang tidak mewakili drive Sistem File Terdistribusi (DFS) tidak melalui MUP. Operasi ini langsung masuk ke penyedia jaringan yang menangani pemetaan huruf drive.

Untuk pengalih jaringan yang sesuai dengan model pengalihan yang diperbarui yang diperkenalkan di Windows Vista, MUP terlibat bahkan ketika drive jaringan yang dipetakan digunakan. Operasi file yang dilakukan pada drive yang dipetakan melalui MUP ke pengalihan jaringan. Dalam hal ini, MUP hanya meneruskan operasi ke pengalihan jaringan yang terlibat.

MUP adalah bagian dari biner mup.sys , yang juga mencakup klien DFS (Sistem File Terdistribusi).

Pengalih jaringan kernel biasanya juga memiliki DLL penyedia WNet mode pengguna untuk mendukung pembuatan koneksi ke sumber daya jarak jauh (pemetaan huruf drive ke sumber daya jarak jauh, misalnya). MPR adalah DLL mode pengguna yang membuat koneksi jaringan berdasarkan kueri ke penyedia WNet. Panggilan ke MPR adalah hasil dari salah satu operasi berikut:

  • Perintah net use x: \\server\share yang dikeluarkan dari prompt perintah.

  • Sambungan huruf kandar jaringan yang dibuat dari Windows Explorer.

  • Panggilan langsung ke fungsi WNet.

Pengalih jaringan harus mendaftar dengan MUP untuk menangani nama UNC. Mungkin ada beberapa penyedia UNC yang terdaftar di MUP. Penyedia UNC ini bisa menjadi satu atau beberapa pengalih berikut:

  • Pengalih mini jaringan berdasarkan RDBSS, seperti pengalih Blok Pesan Server (SMB) dan pengalihan WebDAV.
  • Pengalihan warisan tidak didasarkan pada RDBSS.

Resolusi awalan

MUP menentukan penyedia mana yang dapat menangani jalur UNC dalam operasi berbasis nama, biasanya permintaan IRP_MJ_CREATE. Penetapan ini disebut sebagai "resolusi awalan." Operasi resolusi awalan melayani dua tujuan:

  • Operasi berbasis nama yang menghasilkan resolusi awalan dirutekan ke penyedia yang mengklaim awalan. Jika berhasil, MUP memastikan bahwa operasi berbasis handel berikutnya (IRP_MJ_READ dan IRP_MJ_WRITE, misalnya) masuk ke penyedia yang sama sepenuhnya melewati MUP.

  • Penyedia dan awalan yang diklaim dimasukkan dalam cache awalan yang dipertahankan MUP. Untuk operasi berbasis nama berikutnya, MUP menggunakan cache awalan ini untuk menentukan apakah penyedia telah mengklaim awalan sebelum mencoba melakukan resolusi awalan. Setiap entri dalam cache awalan ini tunduk pada batas waktu (disebut sebagai TTL) setelah ditambahkan ke cache. Entri dibuang setelah batas waktu ini kedaluwarsa, di mana MUP melakukan resolusi awalan lagi untuk awalan ini pada operasi berbasis nama berikutnya.

MUP melakukan resolusi awalan dengan mengeluarkan permintaan IOCTL_REDIR_QUERY_PATH ke pengalih jaringan yang terdaftar di MUP. Buffer input dan output untuk IOCTL_REDIR_QUERY_PATH dialokasikan dari kumpulan yang tidak dipagasi.

Pengalih jaringan hanya boleh mengizinkan pengirim mode kernel IOCTL ini, dengan memverifikasi bahwa anggota RequesterMode dari struktur IRP adalah KernelMode.

MUP menggunakan struktur QUERY_PATH_REQUEST untuk informasi permintaan.

Penyedia UNC harus menggunakan struktur QUERY_PATH_RESPONSE untuk informasi respons.

Setiap pengalih jaringan warisan (bukan berdasarkan penggunaan RDBSS) yang mendaftar sebagai penyedia UNC dengan MUP dengan memanggil FsRtlRegisterUncProvider menerima permintaan IOCTL_REDIR_QUERY_PATH.

Pengarah mini jaringan yang menunjukkan dukungan sebagai penyedia UNC menerima klaim awalan ini seolah-olah itu adalah panggilan IRP_MJ_CREATE. Permintaan pembuatan ini mirip dengan panggilan CreateFile mode pengguna dengan bendera FILE_CREATE_TREE_CONNECTION diatur. Pengarah mini jaringan tidak menerima klaim awalan sebagai panggilan ke MRxLowIOSubmit[LOWIO_OP_IOCTL]. Untuk klaim awalan, RDBSS mengirimkan permintaan MRxCreateSrvCall ke pengalih mini jaringan diikuti dengan panggilan ke MRxSrvCallWinnerNotify dan MRxCreateVNetRoot. Ketika pengalih mini jaringan mendaftar dengan RDBSS, RDBSS menyalin tabel pengiriman driver untuk pengalihan mini jaringan untuk menunjuk ke titik masuk RDBSS internal. RDBSS kemudian menerima IOCTL_REDIR_QUERY_PATH ini secara internal untuk pengalihan mini jaringan dan memanggil MRxCreateSrvCall, MRxSrvCallWinnerNotify, dan MRxCreateVNetRoot. IRP IOCTL_REDIR_QUERY_PATH asli terkandung dalam struktur RX_CONTEXT yang diteruskan ke rutinitas MRxCreateSrvCall. Selain itu, anggota berikut dalam RX_CONTEXT yang diteruskan ke MRxCreateSrvCall dimodifikasi:

  • Anggota MajorFunction diatur ke IRP_MJ_CREATE meskipun IRP asli IRP_MJ_DEVICE_CONTROL.
  • Anggota PrefixClaim.SuppliedPathName.Buffer diatur ke anggota FilePathName dari struktur QUERY_PATH_REQUEST.
  • Anggota PrefixClaim.SuppliedPathName.Length diatur ke anggota PathNameLength dari struktur QUERY_PATH_REQUEST.
  • Anggota Create.NtCreateParameters.SecurityContext diatur ke anggota SecurityContext dari struktur QUERY_PATH_REQUEST.
  • Anggota Create.ThisIsATreeConnectOpen diatur ke TRUE.
  • Anggota Create.Flags memiliki set bit RX_CONTEXT_CREATE_FLAG_UNC_NAME.

Jika pengarah mini jaringan ingin melihat detail klaim awalan, itu dapat membaca anggota ini di RX_CONTEXT diteruskan ke MRxCreateSrvCall. Jika tidak, itu hanya dapat mencoba untuk menyambungkan ke berbagi server dan mengembalikan STATUS_SUCCESS jika panggilan MRxCreateSrvCall berhasil. RDBSS membuat klaim awalan atas nama pengalih mini jaringan.

Ada satu kasus di mana pengarah mini jaringan dapat menerima IOCTL ini secara langsung. Pengarah mini jaringan dapat menyimpan salinan tabel pengiriman drivernya sebelum menginisialisasi dan mendaftar dengan RDBSS. Setelah memanggil RxRegisterMinirdr untuk mendaftar dengan RDBSS, pengalihan mini jaringan dapat menyimpan salinan titik masuk tabel pengiriman driver baru yang diinstal oleh RDBSS dan memulihkan tabel pengiriman driver aslinya. Tabel pengiriman driver yang dipulihkan perlu dimodifikasi sehingga setelah memeriksa IRP yang diterima untuk IRP yang menarik bagi pengalih mini jaringan, panggilan diteruskan ke titik masuk pengiriman driver RDBSS. RDBSS menyalin tabel pengiriman driver dari pengalih mini jaringan ketika driver menginisialisasi RDBSS dan memanggil RxRegisterMinrdr. Pengarah mini jaringan yang menautkan terhadap rdbsslib.lib harus menyimpan tabel pengiriman driver aslinya sebelum memanggil RxDriverEntry dari rutinitas DriverEntry-nyauntuk menginisialisasi pustaka statis RDBSS dan memulihkan tabel pengiriman drivernya setelah memanggil RxRegisterMinrdr. Persyaratan ini karena RDBSS menyalin melalui tabel pengiriman pengalihan mini jaringan dalam rutinitas RxDriverEntry dan RxRegisterMinrdr .

Nilai registri REG_SZ ProviderOrder mengontrol urutan penyedia dikueri selama resolusi awalan. Nilai ini disimpan di bawah kunci berikut:

HKLM\System\CurrentControlSet\Control\NetworkProvider\Order

Nama penyedia individu dalam nilai registri ProviderOrder dipisahkan oleh koma tanpa spasi kosong di awal atau akhir.

Misalnya, nilai ini dapat berisi string:

RDPNP,LanmanWorkstation,WebClient

Mengingat jalur UNC \\<server>\<share>\<path>, MUP mengeluarkan permintaan resolusi awalan jika awalan (\\server\share atau \\server, misalnya) tidak ditemukan di cache awalan MUP. MUP mengirimkan permintaan resolusi awalan ke setiap penyedia dalam urutan berikut sampai penyedia mengklaim awalan, atau sampai semua penyedia dikueri:

  1. Klien TS (RDPNP)

  2. Pengalihan SMB (LanmanWorkstation)

  3. Pengalihan WebDAV (WebClient)

Perubahan pada nilai registri ProviderOrder mengharuskan boot ulang diterapkan di MUP.

MUP menggunakan setiap nama penyedia yang tercantum untuk menemukan kunci registri penyedia di bawah kunci registri berikut:

HKLM\System\CurrentControlSet\Services\<ProviderName>

MUP kemudian membaca nilai DeviceName di bawah subkuntah NetworkProvider untuk menemukan nama perangkat tempat penyedia akan mendaftar. Ketika penyedia benar-benar mendaftar, MUP cocok dengan nama perangkat yang diteruskan dengan daftar nama perangkat penyedia yang diketahui. Kemudian menempatkan penyedia dalam daftar yang diurutkan untuk tujuan resolusi awalan. Urutan penyedia dalam daftar ini didasarkan pada urutan yang ditentukan dalam nilai registri ProviderOrder yang sebelumnya dibahas.

Router Beberapa Penyedia (MPR), DLL mode pengguna yang membuat koneksi jaringan berdasarkan kueri ke penyedia WNet, juga mematuhi pesanan penyedia ini.

MUP mengeluarkan permintaan resolusi awalan secara serial dan berhenti segera setelah penyedia pertama mengklaim awalan. Dengan demikian, dalam contoh sebelumnya, jika RDPNP mengklaim awalan, MUP tidak memanggil pengalih SMB atau WebDAV.

"Resolusi awalan serial" (versus paralel) mencegah pengalih jaringan dengan prioritas ProviderOrder yang lebih rendah menyebabkan masalah performa untuk pengalih jaringan dengan prioritas ProviderOrder yang lebih tinggi. Misalnya, pertimbangkan server jarak jauh, dengan firewall di tempat, dikonfigurasi untuk memblokir jenis paket TCP/IP tertentu (akses ke HTTP, misalnya), tetapi untuk mengizinkan orang lain (akses SMB, misalnya). Dalam hal ini, bahkan jika pengalih jaringan SMB dikonfigurasi sebagai penyedia pertama dalam nilai ProviderOrder dan mengklaim awalan dengan cepat, pengalih WebDAV mungkin secara signifikan menunda penyelesaian resolusi awalan dengan menunggu koneksi TCP ke waktu habis.