Aracılığıyla paylaş


UNC Adlandırma ve MUP desteği

Bu makalede, bir ağ yeniden yönlendiricisinin tekdüzen adlandırma kuralı (UNC) adlandırmasını ve Birden Çok UNC Sağlayıcısını (MUP) nasıl destekleyebileceğiniz açıklanmaktadır.

MUP, UNC yollarının işlenmesinden sorumlu sistem tarafından sağlanan, çekirdek modu bileşenidir:

  • UNC kullanılarak tanımlanan ağ kaynaklarının bulunmasına yardımcı olur.

  • UnC adı kullanarak tüm uzak dosya sistemi erişimlerini, uzak dosya sistemi isteklerini işleyebilen bir ağ yeniden yönlendiricisine yönlendirir. Ağ yönlendiricisi UNC sağlayıcısıdır.

Bir uygulama UNC yolu kullandığında MUP söz konusu olur; örneğin, aşağıdaki gibi bir komut satırı komutu:

notepad \\server\public\readme.txt

MUP, uygulamalardan UNC adlarını içeren komutları alır. Adı kayıtlı her UNC sağlayıcısına ve yüklü diğer ağ sağlayıcılarına gönderir. UNC sağlayıcısı bir UNC adını kendi adı olarak tanımladığında, MUP bu adın gelecekteki örneklerini otomatik olarak bu sağlayıcıya yönlendirir.

MUP, eşlenmiş bir sürücü harfi (örneğin "NET USE" komutu) oluşturan bir işlem sırasında dahil değildir. Bunun yerine, ağ yönlendirme işlemi için birden çok sağlayıcı yönlendiricisi (MPR) ve kullanıcı modlu Windows Ağı (WNet) sağlayıcı DLL'i bu işlemi yürütür. Ancak, bir kullanıcı modeli WNet sağlayıcı DLL, bu işlem sırasında çekirdek mod ağ yönlendirme sürücüsüyle doğrudan iletişim kurabilir.

Windows Vista'da tanıtılan yeniden yönlendirici modeline uyan ağ yeniden yönlendiricileri için eşlenmiş bir ağ sürücüsü kullanıldığında bile MUP söz konusu olur. Eşlenen sürücüde gerçekleştirilen dosya işlemleri MUP'den ağ yeniden yönlendiricisine gider. Bu durumda, MUP işlemi yalnızca ilgili ağ yeniden yönlendiricisine geçirir.

MUP, DFS (Dağıtılmış Dosya Sistemi) istemcisini de içeren mup.sys ikili dosyasının bir parçasıdır.

Çekirdek ağ yeniden yönlendiricisi normalde uzak kaynaklara bağlantı kurulmasını (örneğin, sürücü harflerini uzak kaynaklara eşleme) desteklemek için kullanıcı modu WNet sağlayıcı DLL'sine de sahiptir. MPR, WNet sağlayıcılarına yönelik sorguları temel alan ağ bağlantıları oluşturan bir kullanıcı modu DLL'dir. MPR'ye yapılan çağrılar aşağıdaki işlemlerden herhangi birinden kaynaklanır:

  • Komut isteminden net use x: \\server\share verilen komut.

  • Windows Gezgini'nden kurulan bir ağ sürücüsü harfi bağlantısı.

  • WNet fonksiyonlarına doğrudan çağrılar.

Bir ağ yeniden yönlendiricinin UNC adlarını işlemek için MUP'a kaydolması gerekir. MUP'a kayıtlı birden çok UNC sağlayıcısı olabilir. Bu UNC sağlayıcıları aşağıdaki yeniden yönlendiricilerden biri veya daha fazlası olabilir:

  • Sunucu İleti Bloğu (SMB) yeniden yönlendiricisi ve WebDAV yeniden yönlendiricisi gibi RDBSS tabanlı ağ mini yeniden yönlendiricileri.
  • RDBSS tabanlı olmayan eski yeniden yönlendiriciler.

Ön ek çözümlemesi

MUP, ad tabanlı bir işlemde unc yolunu işleyebilen sağlayıcıyı (genellikle bir IRP_MJ_CREATE isteği) belirler. Bu belirlemeye "ön ek çözümlemesi" denir. Ön ek çözümleme işlemi iki amaca hizmet eder:

  • Ön ek çözümlemesi ile sonuçlanan ad tabanlı işlem, ön eki talep eden sağlayıcıya yönlendirilir. Başarılı olursa MUP, sonraki tanıtıcı tabanlı işlemlerin (örneğin IRP_MJ_READ ve IRP_MJ_WRITE) MUP'yi tamamen atlayarak aynı sağlayıcıya gitmesini sağlar.

  • Sağlayıcı ve talep edilen ön eki, MUP tarafından tutulan bir ön ek önbelleğine girilir. Sonraki ad tabanlı işlemler için MUP, bir ön ek çözümlemesi gerçekleştirmeye çalışmadan önce bir sağlayıcının önceden ön ek talep edip etmediğini belirlemek için bu ön ek önbelleğini kullanır. Bu ön ek önbelleğindeki her giriş, önbelleğe eklendikten sonra zaman aşımına ( TTL olarak adlandırılır) tabidir. Bu zaman aşımı sona erdikten sonra bir girdi silinir; bu noktada, MUP sonraki ad tabanlı bir işlemde bu ön ek için yeniden ön ek çözümlemesi gerçekleştirir.

MUP, MUP'ye kayıtlı ağ yönlendiricilerine IOCTL_REDIR_QUERY_PATH isteği göndererek ön ek çözümlemesi yapar. IOCTL_REDIR_QUERY_PATH için giriş ve çıkış arabellekleri, sayfasız havuzdan ayrılır.

Ağ yeniden yönlendiricileri, IRP yapısının RequesterMode üyesinin KernelMode olduğunu doğrulayarak yalnızca bu IOCTL'nin çekirdek modu gönderenlerine izin vermelidir.

MUP, istek bilgileri için QUERY_PATH_REQUEST yapısını kullanır.

UNC sağlayıcıları yanıt bilgileri için QUERY_PATH_RESPONSE yapısını kullanmalıdır.

FsRtlRegisterUncProvider'ı çağırarak MUP ile UNC sağlayıcısı olarak kaydolan tüm eski ağ yeniden yönlendiricileri (RDBSS kullanımına bağlı değildir) IOCTL_REDIR_QUERY_PATH isteğini alır.

UNC sağlayıcısı olarak desteği belirten bir ağ mini yeniden yönlendiricisi, bu ön ek talebi bir IRP_MJ_CREATE çağrısıymış gibi alır. Bu oluşturma isteği, FILE_CREATE_TREE_CONNECTION bayrağının ayarlandığı kullanıcı modu CreateFile çağrısına benzer. Ağ mini yeniden yönlendiricisi, önek talebini MRxLowIOSubmit[LOWIO_OP_IOCTL] çağrısı olarak almaz. Önek talebi için RDBSS, ağ mini yeniden yönlendiricisine bir MRxCreateSrvCall isteği gönderir ve ardından MRxSrvCallWinnerNotify ve MRxCreateVNetRoot çağrısını gerçekleştirir. Ağ mini yeniden yönlendiricisi RDBSS'ye kaydolduğunda RDBSS, ağ mini yeniden yönlendiricisinin sürücü dağıtım tablosunu iç RDBSS giriş noktalarına işaret etmek üzere kopyalar. RDBSS daha sonra bu IOCTL_REDIR_QUERY_PATH ağ mini yeniden yönlendiricisi için dahili olarak alır ve MRxCreateSrvCall, MRxSrvCallWinnerNotify ve MRxCreateVNetRoot'u çağırır. Özgün IOCTL_REDIR_QUERY_PATH IRP, MRxCreateSrvCall yordamına geçirilen RX_CONTEXT yapısında yer alır. Ayrıca, MRxCreateSrvCall'a geçirilen RX_CONTEXT'teki aşağıdaki üyeler değiştirilmiştir:

  • Özgün IRP IRP_MJ_DEVICE_CONTROL olsa bile MajorFunction üyesi IRP_MJ_CREATE olarak ayarlanır.
  • PrefixClaim.SuppliedPathName.Buffer üyesi, QUERY_PATH_REQUEST yapısının FilePathName üyesine ayarlanır.
  • PrefixClaim.SuppliedPathName.Length üyesi, QUERY_PATH_REQUEST yapısının PathNameLength üyesine ayarlanır.
  • Create.NtCreateParameters.SecurityContext üyesi, QUERY_PATH_REQUEST yapısının SecurityContext üyesine ayarlanır.
  • Create.ThisIsATreeConnectOpen üyesi TRUE olarak ayarlanır.
  • Create.Flags üyesi RX_CONTEXT_CREATE_FLAG_UNC_NAME bit kümesine sahiptir.

Ağ mini yönlendiricisi ön ek talebi ayrıntılarını görmek istiyorsa, RX_CONTEXT MRxCreateSrvCall'a geçirildiğinde bu üyeleri okuyabilir. Aksi takdirde, MRxCreateSrvCall çağrısı başarılı olursa sunucu paylaşımına bağlanmayı ve STATUS_SUCCESS döndürmeyi dener. RDBSS, ağ mini yönlendiricisi adına ön ek talebinde bulunur.

Ağ mini yeniden yönlendiricinin bu IOCTL'yi doğrudan alabileceği bir durum vardır. Ağ mini yeniden yönlendiricisi, RDBSS'yi başlatmadan ve RDBSS'ye kaydetmeden önce sürücü dağıtım tablosunun bir kopyasını kaydedebilir. RDBSS'ye kaydolmak için RxRegisterMinirdr'ı çağırdıktan sonra, ağ mini yeniden yönlendiricisi RDBSS tarafından yüklenen yeni sürücü dağıtım tablosu giriş noktalarının bir kopyasını kaydedebilir ve özgün sürücü gönderme tablosunu geri yükleyebilir. Yeniden yüklenen sürücü dağıtım tablosunun, alınan IRP'nin ağ mini yeniden yönlendiricisinin ilgilendiği IRP'ler için kontrol edilmesinden sonra, çağrının RDBSS sürücüsü dağıtım giriş noktalarına iletilmesi için değiştirilmesi gerekir. RDBSS, sürücünün RDBSS'yi başlatıp RxRegisterMinrdr'ı çağırdığında, ağ mini-yeniden yönlendiricisinin sürücü dağıtım tablosunu kopyalar. rdbsslib.lib'e bağlanan bir ağ mini yeniden yönlendiricisi, RDBSS statik kitaplığını başlatmak ve RxRegisterMinrdr'ı çağırdıktan sonra sürücü dağıtım tablosunu geri yüklemek için DriverEntry yordamından RxDriverEntry'yi çağırmadan önce özgün sürücü dağıtım tablosunu kaydetmelidir. Bunun nedeni, RDBSS'nin hem RxDriverEntry hem de RxRegisterMinrdr rutinlerindeki ağ mini yönlendirici dağıtım tablosunu kopyalamasıdır.

REG_SZ ProviderOrder kayıt defteri değeri, önek çözümlemesi sırasında sağlayıcıların sorgulanma sırasını denetler. Bu değer aşağıdaki anahtar altında depolanır:

HKLM\System\CurrentControlSet\Control\NetworkProvider\Order

ProviderOrder kayıt defteri değerindeki tek tek sağlayıcı adları, başında veya sonunda boşluk olmadan virgülle ayrılır.

Örneğin, bu değer şu dizeyi içerebilir:

RDPNP,LanmanWorkstation,WebClient

\\server>\<<share>\<path> UNC yolu verüldüğünde, MUP öneki (örneğin, \\sunucu\paylaşım veya \\sunucu) MUP ön ek önbelleğinde bulunamazsa, MUP bir ön ek çözümleme isteği gönderir. MUP, bir sağlayıcı ön eki talep edene kadar veya tüm sağlayıcılar sorgulanana kadar her sağlayıcıya aşağıdaki sırayla bir ön ek çözümleme isteği gönderir:

  1. TS istemcisi (RDPNP)

  2. SMB yeniden yönlendiricisi (LanmanWorkstation)

  3. WebDAV yeniden yönlendiricisi (WebClient)

ProviderOrder kayıt defteri değerinde yapılan değişiklikler, MUP'da yeniden başlatmanın etkili olmasını gerektirir.

MUP, sağlayıcının kayıt defteri anahtarını aşağıdaki kayıt defteri anahtarı altında bulmak için listelenen her sağlayıcı adını kullanır:

HKLM\System\CurrentControlSet\Services\<ProviderName>

Ardından MUP, sağlayıcının kaydedileceği cihaz adını bulmak için NetworkProvider alt anahtarının altındaki DeviceName değerini okur. Sağlayıcı gerçekten kaydolduğunda, MUP, iletilen cihaz adını bilinen sağlayıcıların cihaz adı listesiyle eşleştirir. Ardından sağlayıcıyı ön ek çözümleme amacıyla sıralı bir listeye yerleştirir. Bu listedeki sağlayıcıların sırası, daha önce açıklanan ProviderOrder kayıt defteri değerinde belirtilen sırayı temel alır.

Kullanıcı modunda çalışan ve WNet sağlayıcılarına yönelik sorgulara göre ağ bağlantılarını kuran Birden Çok Sağlayıcı Yönlendiricisi (MPR) DLL'i, bu sağlayıcı sırasına da sadık kalır.

MUP, ön ek çözümleme isteğini seri olarak oluşturur ve ilk sağlayıcı ön eki talep eder etmez durur. Bu nedenle, önceki örnekte RDPNP bir ön ek talep ederse, MUP SMB veya WebDAV yeniden yönlendiricilerini çağırmaz.

"Seri ön ek çözümlemesi" (paralel yerine), daha düşük ProviderOrder önceliğine sahip bir ağ yeniden yönlendiricisinin, daha yüksek ProviderOrder önceliğine sahip bir ağ yeniden yönlendiricisinde performans sorunlarına neden olmasını önler. Örneğin, belirli tcp/IP paketleri türlerini (örneğin HTTP'ye erişim) engelleyecek şekilde yapılandırılmış bir güvenlik duvarı bulunan uzak bir sunucu düşünün, ancak başkalarına izin vermek için (örneğin SMB erişimi). Bu durumda, SMB ağ yeniden yönlendiricisi ProviderOrder değerinde ilk sağlayıcı olarak yapılandırılmış olsa ve ön eki hızla talep etse bile, WebDAV yeniden yönlendiricisi TCP bağlantısının zaman aşımına gelmesini bekleyerek ön ek çözümlemesinin tamamlanmasını önemli ölçüde geciktirebilir.