PathIsDirectory işlevi, sondaki ters eğik çizgiye sahip bir UNC sunucu adı kullanılarak çağrıldığında engellenebilir
Bu makale, sonunda ters eğik çizgi olan bir UNC sunucu adı kullanan uygulamalar tarafından çağrıldığında işlevin engellenmesi sorununu PathIsDirectory
çözmenize yardımcı olur.
Orijinal ürün sürümü: Windows 10 için Windows SDK
Özgün KB numarası: 4525162
Belirtiler
İşlevi PathIsDirectory
çağıran uygulamalar, sonunda ters eğik çizgi olan bir Evrensel Adlandırma Kuralı (UNC) sunucu adı kullanarak çağrıyı yaptıklarında çağrı iş parçacığını iki dakikaya kadar engelleyebilir. Örneğin: \\servername\
.
Neden
Çağrıdaki bir çağrı iş parçacığını engelleyen bir PathIsDirectory
uygulamanın aşağıdakine benzer bir çağrı yığını olabilir:
0:000> kn
# Child-SP RetAddr Çağrı Sitesi
00 0000006f3b59f108 00007ffc
94f48ba3 ntdll! ZwWaitForSingleObject+0x14
01 0000006f3b59f110 00007ffc
8eebb303 KERNELBASE! WaitForSingleObjectEx+0x93
02 (Satır içi İşlev) ---------------- WINHTTP! HTTP_USER_REQUEST::_HandleSyncPending+0x2d
03 0000006f3b59f1b0 00007ffc
8eec9a85 WINHTTP! HTTP_USER_REQUEST::SendRequest+0x3f3
04 0000006f3b59f2b0 00007ffc
8afff4fe WINHTTP! WinHttpSendRequest+0x585
05 0000006f3b59f410 00007ffc
8b000135 davclnt! DavDoesServerDoDav+0x4ba
06 0000006f3b59f4f0 00007ffc
8affc2fa davclnt! DavShouldStartWebclientService+0x2f9
07 0000006f3b59f570 00007ffc
70b8e851 davclnt! NPGetResourceInformation+0x23a
08 0000006f3b59f610 00007ffc
70b8c7d5 MPR! CGetResourceInformation::TestProvider+0x21
09 0000006f3b59f650 00007ffc
70b8c9fd MPR! CRoutedOperation::GetResult+0x135
0a 0000006f3b59f6d0 00007ffc
70b8ca69 MPR! CMprOperation::P erform+0x4d
0b 0000006f3b59f710 00007ffc
70b8e9bf MPR! CRoutedOperation::P erform+0x29
0c 0000006f3b59f740 00007ffc
956ed27c MPR! WNetGetResourceInformationW+0x4f
0d 0000006f3b59f7d0 00007ff7
226f292e SHLWAPI! PathIsDirectoryW+0x60fc
Belirtilen sunucu hakkında bilgi almak için işlev çağrıldığında WNetGetResourceInformation
bu durum oluşur. Bu çağrı yığınında, Web DAV ağ sağlayıcısı DLL'i (DAVCLNT.DLL) belirtilen sunucunun bir HTTP isteğine yanıt vermesini beklerken çağrı iş parçacığını engeller. Bu işlemin zaman aşımına uğradı olması iki dakika kadar sürebilir. Çağıran iş parçacığı, sunucu HTTP isteğine yanıt verene kadar veya istek zaman aşımına gelene kadar engellenir.
Çözüm
PathIsDirectory çağrılmadan önce UNC adında sondaki ters eğik çizgiyi kaldırırsanız uygulamalar bu senaryoyu önleyebilir: \\servername
.
Alternatif olarak, Web DAV ağ sağlayıcısı tarafından yapılan HTTP isteğindeki gecikmeyi önlemek için WebClient hizmetini devre dışı bırakın veya hizmeti otomatik olarak başlatacak şekilde yapılandırın.