Program może przestać działać, gdy używa wywołań RPC do serwera systemu UNIX

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 811576 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Symptomy

Program klienta działający w systemie Microsoft Windows XP i korzystający z usług zdalnego wywołania procedur (RPC, Remote Procedure Call) może powodować losowe naruszenia praw dostępu, gdy komunikuje się z serwerem usługi RPC działającym na serwerze systemu UNIX.

Przyczyna

Ten problem jest powodowany przez niepoprawny bufor w bibliotece wykonawczej DLL usługi RPC (Rpcrt4.dll). Przepełnienie buforu występuje tylko wtedy, gdy klient wykonuje wychodzące wywołanie RPC do serwera UNIX po okresie bezczynności wynoszącym od 40 do 60 sekund i gdy dla tego wywołania jest oczekiwana obszerna odpowiedź. Przepełniony bufor uszkadza blok pamięci znajdujący się bezpośrednio po buforze używanym przez usługę RPC i może powodować losowe naruszenia praw dostępu w programie klienta.

Rozwiązanie

Informacje dotyczące dodatku Service Pack

W celu rozwiązania tego problemu należy uzyskać najnowszy dodatek Service Pack dla systemu Microsoft Windows XP. Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
322389 Jak uzyskać najnowszy dodatek Service Pack dla systemu Windows XP

Informacje o poprawce

Firma Microsoft udostępniła obsługiwaną poprawkę. Jednak jest ona przeznaczona tylko do usunięcia problemu opisanego w tym artykule. Tę poprawkę należy stosować tylko w tych systemach, w których występuje opisany problem. Poprawka może być nadal w fazie testowania. Jeżeli dany system nie jest poważnie narażony na ten problem, firma Microsoft zaleca, aby poczekać na następną aktualizację oprogramowania zawierającą tę poprawkę.

Jeśli poprawka jest dostępna do pobrania, na początku tego artykułu z bazy wiedzy Knowledge Base jest umieszczona sekcja „Poprawka dostępna do pobrania”. Jeśli nie ma tej sekcji, skontaktuj się z działem pomocy technicznej firmy Microsoft w celu uzyskania poprawki.

Uwaga W przypadku wystąpienia dodatkowych błędów lub konieczności rozwiązania problemu może być wymagane utworzenie osobnego zlecenia usługi. Typowe opłaty za korzystanie z pomocy technicznej będą pobierane tylko w przypadku dodatkowych pytań i problemów, których nie można rozwiązać przy użyciu tej poprawki. Aby uzyskać pełną listę numerów telefonów Pomocy technicznej firmy Microsoft lub utworzyć osobne zlecenie usługi, odwiedź następującą witrynę firmy Microsoft w sieci Web:
http://support.microsoft.com/contactus/?ws=support
Uwaga Sekcja „Poprawka dostępna do pobrania” zawiera listę języków, dla których ta poprawka jest dostępna. Jeśli odpowiedni język nie jest widoczny, oznacza to, że ta poprawka nie jest dostępna dla tego języka. Wersja angielskojęzyczna tej poprawki ma atrybuty plików wymienione w poniższej tabeli (lub nowsze). Daty i godziny odpowiadające tym plikom zostały podane zgodnie z uniwersalnym czasem koordynowanym (UTC). Podczas wyświetlania informacji o plikach są one konwertowane na czas lokalny. Aby sprawdzić różnicę między czasem UTC i czasem lokalnym, należy skorzystać z karty Strefa czasowa apletu Data i godzina w Panelu sterowania.
   Data        Godzina   Wersja         Rozmiar       Nazwa pliku
   ------------------------------------------------------
   23-gru-2002  09:31  5.1.2600.1154  505 856  Rpcrt4.dll

Stan

Firma Microsoft potwierdziła, że jest to problem występujący w produktach firmy Microsoft wymienionych w sekcji „Informacje zawarte w tym artykule dotyczą”. Ten problem został po raz pierwszy rozwiązany w dodatku Service Pack 2 dla systemu Microsoft Windows XP.

Więcej informacji

Niektóre serwery usługi RPC mogą żądać, aby klient kończył bezczynne połączenia w celu zmniejszenia wykorzystania zasobów. Jest to realizowane przez wysłanie do klienta jednostki PDU (Protocol Data Unit) z żądaniem zamknięcia. W programie klienta usługa RPC sprawdza swój bufor odbiorczy tylko wtedy, gdy wysyła wywołanie do serwera RPC. Niektóre serwery UNIX wysyłają jednostki PDU z żądaniem zamknięcia po upływie kolejnych 20 sekund okresu bezczynności. Jeśli klient jest bezczynny na tyle długo, że serwer zdąży wysłać kolejno dwie jednostki PDU z żądaniem zamknięcia, usługa RPC po stronie klienta scala te jednostki PDU w swoim buforze odbiorczym. Jeśli w tym czasie program klienta podejmie próbę wykonania wywołania wychodzącego, będzie próbował najpierw przetworzyć dwie scalone jednostki PDU w buforze odbiorczym. Scalenie tych jednostek powoduje ponowne przydzielenie pamięci do buforu odbiorczego. Jednak informacja o rozmiarze buforu nie jest rejestrowana poprawnie. Może to spowodować zgłoszenie większego rozmiaru buforu niż w rzeczywistości. Następnie jest wykonywane wywołanie wychodzące. Jeśli odpowiedź jest większa niż faktyczny (nie zgłaszany) rozmiar buforu, występuje naruszenie praw dostępu.

Jeśli klient jest bezczynny na tyle długo, że serwer zdąży wysłać trzy kolejne jednostki PDU z żądaniem zamknięcia, usługa RPC zamyka połączenie. Następnie jest tworzone nowe połączenie w celu uruchomienia wywołania wychodzącego. W takiej sytuacji problem nie występuje. Dlatego prawdopodobieństwo wystąpienia problemu jest największe między 40. i 60. sekundą bezczynności programu klienta. Zależy to jednak od czasu oczekiwania serwera UNIX przed wysłaniem jednostki PDU z żądaniem zamknięcia.

Właściwości

Numer ID artykułu: 811576 - Ostatnia weryfikacja: 11 września 2008 - Weryfikacja: 3.1
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
Słowa kluczowe: 
kbautohotfix kbhotfixserver kbqfe kbwinxpsp2fix kbenv kberrmsg kbqfe kbwinxppresp2fix kbfix kbbug KB811576

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com