Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Poniższe kody zatrzymania znajdują się w zestawie podstawowych testów.
Szczegóły zatrzymania wyjątków
Próba wykonania kodu w pamięci nie wykonywalnej (pierwsza szansa).
prawdopodobną przyczynąTen przystanek jest generowany, jeśli aplikacja próbuje uruchomić kod z adresu, który nie jest wykonywalny lub bezpłatny. Aby debugować ten przystanek:
- u parametr2 — unassemble the culprit code (u <parametr2> — unassemble the culprit code)
- .exr <parameter3> — wyświetlanie informacji o wyjątku
- .cxr <parameter4> — wyświetlanie informacji o kontekście wyjątku
- kb — wyświetla ślad stosu dla czasu zgłoszenia wyjątku.
- Parametr 1 - Adres, do których uzyskuje się dostęp.
- Parametr 2 - Kod wykonujący nieprawidłowy dostęp.
- Parametr 3 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 4 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Warstwa testowa: Wyjątki
- Identyfikator zatrzymania: FIRST_CHANCE_ACCESS_VIOLATION_CODE
- Kod zatrzymania: 650
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Obsługa szczegółów zatrzymania
Nieprawidłowy wyjątek obsługi dla bieżącego śledzenia stosu.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli funkcja w górnej części stosu przeszła nieprawidłową dojścia do procedur systemowych. Zazwyczaj proste polecenie "kb" ujawni, jaka jest wartość przekazanego uchwytu (musi to być jeden z parametrów — zwykle pierwszy). Jeśli wartość ma wartość null, jest to wyraźnie błędne. Jeśli wartość wygląda poprawnie, musisz użyć rozszerzenia debugera "!htrace", aby uzyskać historię operacji odnoszących się do tej wartości dojścia. W większości przypadków wartość dojścia jest używana po zamknięciu.
informacje wyświetlane przez weryfikatora aplikacji- parametr 1 — Nie jest używany.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Obsługuje
- Identyfikator zatrzymania: INVALID_HANDLE
- Kod zatrzymania: 300
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowy indeks TLS używany do śledzenia bieżącego stosu.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli funkcja w górnej części stosu przeszła nieprawidłowy indeks TLS do procedur systemowych TLS. Zwykle proste polecenie "kb" ujawni, co jest złe. Typowy błąd polega na założeniu określonej wartości dla indeksu TLS zamiast wywoływania polecenia "TlsAlloc". Może się to zdarzyć przy założeniu, że zawsze otrzymujesz wartość N i dlatego nie trzeba wywoływać metody "TlsAlloc". Częściej jest to spowodowane niezainicjowaną zmienną.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Nieprawidłowy indeks TLS.
- Parametr 2 - Oczekiwano niższej części indeksu.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Obsługuje
- Identyfikator zatrzymania: INVALID_TLS_VALUE
- Kod zatrzymania: 301
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowe parametry wywołania WaitForMultipleObjects.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli funkcja w górnej części stosu o nazwie "WaitForMultipleObjects" z wartością NULL jako adres tablicy dojść do oczekiwania na lub zero jako liczba dojść. Proste polecenie "kb" spowoduje nieprawidłowe wywołanie funkcji wywołującej ten interfejs API.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres obiektu obsługuje wektor.
- Parametr 2 - Liczba dojść.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Obsługuje
- Identyfikator zatrzymania: INCORRECT_WAIT_CALL
- Kod zatrzymania: 302
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Dojście o wartości NULL przekazane jako parametr. Należy użyć prawidłowego uchwytu.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli funkcja w górnej części stosu przekazała dojście NULL do procedur systemowych. Zwykle proste polecenie "kb" ujawni, jaka jest wartość przekazanego uchwytu (musi to być jeden z parametrów, zwykle pierwszy).
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Korzystanie z dojścia o wartości NULL
- Parametr 2 - Nieużytne
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Obsługuje
- Identyfikator zatrzymania: NULL_HANDLE
- Kod zatrzymania: 303
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Oczekiwanie na dojście wątku w dllMain.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli bieżący wątek jest obecnie uruchomiony kod wewnątrz funkcji "DllMain" jednej z bibliotek DLL załadowanych w bieżącym procesie i wywołuje polecenie "WaitForSingleObject" lub "WaitForMultipleObjects", aby czekać na dojściu wątku w tym samym procesie. Jest to najprawdopodobniej prowadzić do zakleszczenia, ponieważ uchwyt wątku nie zostanie zasygnalizowany, chyba że drugi wątek kończy się. Gdy drugi wątek wywołuje element "ExitThread", próbuje uzyskać blokadę modułu ładującego DLL, a następnie wywołać metodę "DllMain" (DLL_THREAD_DETACH) dla wszystkich bibliotek DLL w bieżącym procesie. Ponieważ blokada modułu ładującego jest własnością pierwszego wątku (ten, który czeka na uchwyt wątku), dwa wątki zakleszczą się.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt wątku.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Obsługuje
- Identyfikator zatrzymania: WAIT_IN_DLLMAIN
- Kod zatrzymania: 304
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Niepoprawny typ obiektu dla uchwytu.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli bieżący wątek wywołuje interfejs API z uchwytem do obiektu z nieprawidłowym typem obiektu. Na przykład wywołanie metody "SetEvent" za pomocą uchwytu semafora jako parametru powoduje wygenerowanie tego zatrzymania. Aby debugować ten przystanek:
- kb — aby wyświetlić bieżący ślad stosu. Winowajcą jest prawdopodobnie biblioteka DLL, która wywołuje verifier.dll
- du <parameter2> — aby wyświetlić rzeczywisty typ uchwytu. Wartość uchwytu to parametr1. W poprzednim przykładzie zostanie wyświetlony komunikat "Semaphore".
- du <parameter3> — aby wyświetlić typ obiektu oczekiwany przez interfejs API. We wcześniejszym przykładzie ta nazwa to "Zdarzenie".
- !htrace <parametr1> — może być przydatne, ponieważ wyświetla ślad stosu dla ostatnich operacji otwierania/zamykania na tym dojściu.
- Parametr 1 - Dojmij wartość.
- Parametr 2 - Nazwa typu obiektu. Użyj narzędzia du, aby go wyświetlić
- Parametr 3 - Oczekiwana nazwa typu obiektu. Użyj narzędzia du, aby go wyświetlić
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Obsługuje
- Identyfikator zatrzymania: INCORRECT_OBJECT_TYPE
- Kod zatrzymania: 305
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania stert
Nieznany błąd.
prawdopodobną przyczynąTen komunikat może wystąpić, jeśli napotkany błąd nie może zostać sklasyfikowany w inny sposób. Nieużytne w tej chwili.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Nieużytne
- Parametr 2 - Nieużytne
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: UNKNOWN_ERROR
- Kod zatrzymania: 0x1
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyjątek naruszenia dostępu.
prawdopodobną przyczynąJest to najczęstszy zatrzymanie weryfikatora aplikacji. Zazwyczaj jest to spowodowane przez błąd przekroczenia buforu. Weryfikator sterty umieszcza stronę niedostępną na końcu alokacji sterty, a przepełnienie buforu spowoduje wyjątek, dotykając tej strony. Aby debugować ten przystanek, zidentyfikuj adres dostępu, który spowodował wyjątek, a następnie użyj następującego polecenia debugera:
- !sterta -p -a ACCESS_ADDRESS — to polecenie zawiera szczegółowe informacje o charakterze błędu i tym, który blok stert jest przeładowy. Daje również ślad stosu dla alokacji bloku. Istnieją inne przyczyny tego zatrzymania, na przykład uzyskiwanie dostępu do bloku stert po uwolnieniu. To samo polecenie debugera jest przydatne w tym przypadku.
- Parametr 1 - Nieprawidłowy adres powodujący wyjątek
- Parametr 2 - Adres kodu wykonujący nieprawidłowy dostęp
- Parametr 3 - Rekord wyjątku
- Parametr 4 - Rekord kontekstu
- Warstwa testowa: Stert
- Identyfikator zatrzymania: ACCESS_VIOLATION
- Kod zatrzymania: 0x2
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Dostęp wielowątkowy w stercie utworzony za pomocą flagi HEAP_NO_SERIALIZE.
prawdopodobną przyczynąSterta utworzona za pomocą flagi HEAP_NO_SERIALIZE nie powinna być uzyskiwana jednocześnie z dwóch wątków. Jeśli taka sytuacja zostanie wykryta, zostanie wyświetlony ten komunikat. Typowy sposób, w jaki ta sytuacja wkradnie się do programu, polega na połączeniu z jednowątkową wersją środowiska uruchomieniowego języka C. Na przykład język Visual C++może łączyć statycznie taką bibliotekę, gdy są używane odpowiednie flagi. Deweloperzy zapominają o tym szczegółach i używają wielu wątków. Usterka jest bardzo trudna do debugowania w prawdziwym życiu, ponieważ będzie wyświetlana jako tajemnicze uszkodzenia danych.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta, w której odbywa się operacja.
- Parametr 2 - Identyfikator wątku dla bieżącego właściciela sekcji krytycznej sterta.
- Parametr 3 - Identyfikator wątku bieżącego wątku próbującego wprowadzić stertę.
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: UNSYNCHRONIZED_ACCESS
- Kod zatrzymania: 0x3
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Żądanie o ekstremalnym rozmiarze.
prawdopodobną przyczynąTen komunikat zostanie wygenerowany, jeśli w operacji "HeapAlloc" lub "HeapReAlloc" rozmiar bloku jest większy niż jakakolwiek rozsądna wartość. Zazwyczaj ta wartość jest 0x80000000 na platformach 32-bitowych i znacznie większa na platformach 64-bitowych.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta, w której odbywa się operacja.
- Parametr 2 - Zażądano rozmiaru
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: EXTREME_SIZE_REQUEST
- Kod zatrzymania: 0x4
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uchwyt stertowy z nieprawidłowym podpisem.
prawdopodobną przyczynąStruktury stert są oznaczone magiczną wartością. Jeśli uchwyt sterta używany w wywołaniu interfejsu sterty nie ma tego wzorca, ten zatrzymanie zostanie wygenerowane. Ta usterka może wystąpić, jeśli w jakiś sposób wewnętrzna struktura sterty została uszkodzona (uszkodzenie losowe) lub po prostu fikcyjna wartość jest używana jako uchwyt sterty. Aby uzyskać listę prawidłowych wartości obsługi stert, użyj następującego polecenia debugera:
- !sterta -p
Należy pamiętać, że jeśli po prostu przełączysz prawidłowy uchwyt stert z innym prawidłowym w operacji stertowania, nie uzyskasz tego zatrzymania (uchwyt wygląda prawidłowy po wszystkim). Jednak weryfikator stert wykrywa tę sytuację i zgłasza ją za pomocą SWITCHED_HEAP_HANDLE zatrzymać.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta uchwyt używany w wywołaniu interfejsu sterta
- Parametr 2 - Nieużytne
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: BAD_HEAP_HANDLE
- Kod zatrzymania: 0x5
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzony wskaźnik sterty lub użycie nieprawidłowej sterty.
prawdopodobną przyczynąZazwyczaj dzieje się tak, jeśli blok zostanie przydzielony w jednej stercie i uwolniony w innym. Użyj polecenia debugera "!heap -p", aby uzyskać listę wszystkich prawidłowych wartości obsługi stert. Najczęstszym przykładem jest alokacja msvcrt z użyciem "malloc" w połączeniu z deallocation jądra32 przy użyciu "HeapFree".
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Sterta, gdzie blok został pierwotnie przydzielony.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: SWITCHED_HEAP_HANDLE
- Kod zatrzymania: 0x6
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Blok stertowy został już uwolniony.
prawdopodobną przyczynąTaka sytuacja występuje, jeśli blok zostanie zwolniony dwukrotnie. Wolne bloki są oznaczone w specjalny sposób i są przechowywane przez pewien czas w opóźnionej bezpłatnej kolejce. Jeśli program buggy spróbuje zwolnić blok ponownie, zostanie złapany - zakładając, że blok nie został zdequeued z opóźnionej wolnej kolejki i jego pamięć ponownie użyta do innych alokacji. Głębokość kolejki wolnego opóźnienia jest w kolejności tysięcy bloków, dlatego istnieje duże szanse, że większość podwójnych wolnych zostanie złapana.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta uchwyt dla sterta będąca właścicielem bloku.
- Parametr 2 - Blok stertowania jest zwalniany ponownie.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: DOUBLE_FREE
- Kod zatrzymania: 0x7
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzony blok sterty.
prawdopodobną przyczynąJest to błąd ogólny, który został wyświetlony, jeśli uszkodzenie bloku sterty nie może zostać umieszczone w bardziej konkretnej kategorii.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Reserved
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK
- Kod zatrzymania: 0x8
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Próba zniszczenia sterta procesu.
prawdopodobną przyczynąJest to błąd, który próbuje zniszczyć domyślny stertę procesu (zwracany przez interfejs "GetProcessHeap()".
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta uchwyt używany z HeapDestroy.
- Parametr 2 - Nieużytne
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: DESTROY_PROCESS_HEAP
- Kod zatrzymania: 0x9
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieoczekiwany wyjątek zgłoszony w kodzie sterta.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli podczas wykonywania kodu menedżera sterty naruszenie dostępu jest zgłaszane w nieuprawnionych sytuacjach. Istnieje kilka sytuacji, w których jest to prawidłowe, na przykład podczas wywoływania metody "HeapValidate()" lub "HeapSize()". Informacje o rekordzie wyjątku (trzeci parametr) mogą służyć do znajdowania dokładnego kontekstu wyjątku. W tym celu użyj następujących poleceń debugera:
- dd parametr2 L2
- .exr first_dword
- Second_dword .cxr
Zwykle ten przystanek występuje, jeśli w wewnętrznych strukturach stert występuje pewne losowe uszkodzenie.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta zaangażowana w operację.
- Parametr 2 - Rekord wyjątku.
- Parametr 3 - Rekord kontekstu.
- Parametr 4 - Kod wyjątku (C0000005 — naruszenie dostępu)
- Warstwa testowa: Stert
- Identyfikator zatrzymania: UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0xA
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyjątek zgłoszony podczas weryfikowania nagłówka bloku sterty.
prawdopodobną przyczynąTaka sytuacja występuje, jeśli naprawdę nie możemy określić żadnego określonego typu uszkodzenia bloku. Na przykład gdy adres bloku sterty przekazany do stosu wolnego sterty wskazuje obszar niedostępnej pamięci (uszkodzony wskaźnik, niezainicjowany wskaźnik itp.).
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta uchwyt dla sterta będąca właścicielem bloku.
- Parametr 2 - Blok sterty, który jest uszkodzony.
- Parametr 3 - Rozmiar bloku lub zera, jeśli nie można określić rozmiaru.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER
- Kod zatrzymania: 0xB
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyjątek zgłoszony podczas weryfikowania bloku stert.
prawdopodobną przyczynąTaka sytuacja występuje, jeśli naprawdę nie możemy określić żadnego określonego typu uszkodzenia bloku. Na przykład otrzymasz tę wartość, jeśli podczas wolnej operacji sterta przekażesz adres wskazujący obszar pamięci, który nie jest dostępny. Może się to również zdarzyć w przypadku podwójnych bezpłatnych sytuacji, jeśli nie znajdziemy bloku między blokami sterty pełnej strony i sondujemy go jako blok sterty strony lekkiej.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Reserved.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING
- Kod zatrzymania: 0xC
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Blokada sterty uszkodzona po uwolnieniu.
prawdopodobną przyczynąTaka sytuacja występuje, jeśli blok pamięci jest zapisywany po uwolnieniu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta uchwyt dla sterta będąca właścicielem bloku.
- Parametr 2 - Blok sterty, który jest uszkodzony.
- Parametr 3 - Rozmiar bloku lub zera, jeśli nie można określić rozmiaru.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_HEADER
- Kod zatrzymania: 0xD
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzony wzorzec infiksu dla stosu uwolnionego bloku sterty.
prawdopodobną przyczynąWolne bloki są czasami oznaczone jako niedostępne, a program dotykający ich będzie mieć dostęp do naruszenia (inny weryfikator zatrzymać). W innych przypadkach (na przykład sterta strony lekkiej) blok jest oznaczony magicznym wzorcem i będzie przechowywany przez pewien czas. W końcu w sposób FIFO bloki są naprawdę uwolnione. W tej chwili wzorzec przyrostka jest sprawdzany i jeśli został zmodyfikowany, otrzymasz tę przerwę. Stos w chwili przerwania nie jest istotny. Musisz dowiedzieć się, jaki jest charakter bloku i kodu, przejrzyj kod, który może być nieprawidłowy.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Sterta uchwyt dla sterta będąca właścicielem bloku.
- Parametr 2 -Blok stertowania jest zwalniany.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Reserved.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_FREED_HEAP_BLOCK
- Kod zatrzymania: 0xE
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzony wzorzec sufiksu dla bloku sterty.
prawdopodobną przyczynąZazwyczaj dzieje się tak w przypadku błędów przekroczenia buforu. Czasami weryfikator aplikacji umieszcza niedostępne strony na końcu alokacji i przepełnienia buforu spowoduje naruszenie dostępu, a czasami blok sterty jest obserwowany przez wzorzec magiczny. Jeśli ten wzorzec zostanie zmieniony, gdy blok zostanie uwolniony, uzyskasz tę przerwę. Te przerwy mogą być dość trudne do debugowania, ponieważ nie masz rzeczywistego momentu wystąpienia uszkodzenia. Masz tylko dostęp do bezpłatnej chwili (tj. "zatrzymaj się tutaj") i ślad stosu alokacji ('!sterta -p -a HEAP_ADDRESS')
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Reserved.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_SUFFIX
- Kod zatrzymania: 0xF
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzona sygnatura startowa bloku sterty.
prawdopodobną przyczynąDzieje się tak w przypadku podbiegów buforu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Uszkodzona wartość sygnatury.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_START_STAMP
- Kod zatrzymania: 0x10
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzona sygnatura końcowa bloku sterty.
prawdopodobną przyczynąDzieje się tak w przypadku podbiegów buforu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Uszkodzona wartość sygnatury.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_END_STAMP
- Kod zatrzymania: 0x11
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzony wzorzec prefiksu dla bloku sterty.
prawdopodobną przyczynąDzieje się tak w przypadku podbiegów buforu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Uchwyt stert używany w wywołaniu.
- Parametr 2 - Blok stert zaangażowany w operację.
- Parametr 3 - Rozmiar bloku sterty.
- Parametr 4 - Reserved.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_BLOCK_PREFIX
- Kod zatrzymania: 0x12
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Naruszenie pierwszego prawdopodobieństwa dostępu dla bieżącego śledzenia stosu.
prawdopodobną przyczynąJest to najczęstszy zatrzymanie weryfikatora aplikacji. Zazwyczaj jest to spowodowane przez błąd przekroczenia buforu. Weryfikator sterty umieszcza stronę niedostępną na końcu alokacji sterty, a przepełnienie buforu spowoduje wyjątek, dotykając tej strony. Aby debugować ten przystanek, zidentyfikuj adres dostępu, który spowodował wyjątek, a następnie użyj następującego polecenia debugera:
- !sterta -p -a ACCESS_ADDRESS
To polecenie zawiera szczegółowe informacje o charakterze błędu i tym, jaki jest przeładowanie bloku stert. Spowoduje to również przekazanie śladu stosu dla alokacji bloku. Istnieje kilka innych przyczyn tego zatrzymania, na przykład uzyskiwanie dostępu do bloku stert po uwolnieniu. To samo polecenie debugera będzie przydatne w tym przypadku.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Nieprawidłowy adres powodujący wyjątek.
- Parametr 2 - Adres kodu wykonujący nieprawidłowy dostęp.
- Parametr 3 - Rekord wyjątku.
- Parametr 4 - Rekord kontekstu.
- Warstwa testowa: Stert
- Identyfikator zatrzymania: FIRST_CHANCE_ACCESS_VIOLATION
- Kod zatrzymania: 0x13
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowa liczba list stert procesów.
prawdopodobną przyczynąTen komunikat może wystąpić, jeśli podczas wywoływania metody GetProcessHeaps menedżer stert strony wykrywa pewne wewnętrzne niespójności. Może to być spowodowane przez losowe uszkodzenie w przestrzeni procesu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Rzeczywista liczba stert.
- Parametr 2 - Liczba stert stron.
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Stert
- Identyfikator zatrzymania: CORRUPTED_HEAP_LIST
- Kod zatrzymania: 0x14
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania przecieku
Wyciekła alokacja sterty.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli właściciel biblioteki DLL alokacji został dynamicznie zwolniony podczas posiadania zasobów.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres wycieku alokacji. Uruchom polecenie !sterta -p -a <adres> , aby uzyskać dodatkowe informacje o alokacji.
- Parametr 2 - Adres do śledzenia stosu alokacji. Uruchom adres< dps>, aby wyświetlić stos alokacji.
- Parametr 3 - Adres nazwy biblioteki dll właściciela. Uruchom polecenie du <address> , aby odczytać nazwę biblioteki dll.
- Parametr 4 - Baza biblioteki dll właściciela. Uruchom polecenie .reload <dll_name> = <adres> , aby ponownie załadować bibliotekę dll właściciela. Użyj "lm", aby uzyskać więcej informacji na temat załadowanych i zwolnionych modułów.
- Warstwa testowa: Przeciek
- Identyfikator zatrzymania: PRZYDZIAŁ
- Kod zatrzymania: 0x900
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyciekł uchwyt.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli właściciel biblioteki DLL dojścia został dynamicznie zwolniony podczas posiadania zasobów. Aby debugować ten przystanek: Uruchom polecenie !htrace parameter1, aby uzyskać dodatkowe informacje o dojściu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Wartość wycieku uchwytu. Uruchom polecenie !uchwyt htrace, <aby uzyskać dodatkowe informacje o dojściu> , jeśli śledzenie obsługi jest włączone.
- Parametr 2 - Adres do śledzenia stosu alokacji. Uruchom adres< dps>, aby wyświetlić stos alokacji.
- Parametr 3 - Adres nazwy biblioteki dll właściciela. Uruchom polecenie du <address> , aby odczytać nazwę biblioteki dll.
- Parametr 4 - Baza biblioteki dll właściciela. Uruchom polecenie .reload <dll_name> = <adres> , aby ponownie załadować bibliotekę dll właściciela. Użyj "lm", aby uzyskać więcej informacji na temat załadowanych i zwolnionych modułów.
- Warstwa testowa: Przeciek
- Identyfikator zatrzymania: UCHWYT
- Kod zatrzymania: 0x901
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyciekł klucz HKEY.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli biblioteka DLL właściciela klucza rejestru została dynamicznie zwolniona podczas posiadania zasobów.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Wartość wycieku klucza HKEY.
- Parametr 2 - Adres do śledzenia stosu alokacji. Uruchom adres< dps>, aby wyświetlić stos alokacji.
- Parametr 3 - Adres nazwy biblioteki dll właściciela. Uruchom polecenie du <address> , aby odczytać nazwę biblioteki dll.
- Parametr 4 - Baza biblioteki dll właściciela. Uruchom polecenie .reload <dll_name> = <adres> , aby ponownie załadować bibliotekę dll właściciela. Użyj "lm", aby uzyskać więcej informacji na temat załadowanych i zwolnionych modułów.
- Warstwa testowa: Przeciek
- Identyfikator zatrzymania: REJESTR
- Kod zatrzymania: 0x902
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyciekła wirtualna rezerwacja.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli biblioteka DLL właściciela rezerwacji wirtualnej została dynamicznie zwolniona podczas posiadania zasobów.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Wyciekły adres rezerwacji.
- Parametr 2 - Adres do śledzenia stosu alokacji. Uruchom adres< dps>, aby wyświetlić stos alokacji.
- Parametr 3 - Adres nazwy biblioteki dll właściciela. Uruchom polecenie du <address> , aby odczytać nazwę biblioteki dll.
- Parametr 4 - Baza biblioteki dll właściciela. Uruchom polecenie .reload <dll_name> = <adres> , aby ponownie załadować bibliotekę dll właściciela. Użyj "lm", aby uzyskać więcej informacji na temat załadowanych i zwolnionych modułów.
- Warstwa testowa: Przeciek
- Identyfikator zatrzymania: VIRTUAL_RESERVATION
- Kod zatrzymania: 0x903
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wyciekł BSTR.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli właściciel biblioteki dll sysString został dynamicznie zwolniony podczas posiadania zasobów.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres wycieku BSTR. Uruchom polecenie !sterta -p -a <adres> , aby uzyskać dodatkowe informacje o alokacji.
- Parametr 2 - Adres do śledzenia stosu alokacji. Uruchom adres< dps>, aby wyświetlić stos alokacji.
- Parametr 3 - Adres nazwy biblioteki dll właściciela. Uruchom polecenie du <address> , aby odczytać nazwę biblioteki dll.
- Parametr 4 - Baza biblioteki dll właściciela. Uruchom polecenie .reload <dll_name> = <adres> , aby ponownie załadować bibliotekę dll właściciela. Użyj "lm", aby uzyskać więcej informacji na temat załadowanych i zwolnionych modułów.
- Warstwa testowa: Przeciek
- Identyfikator zatrzymania: SYSSTRING
- Kod zatrzymania: 0x904
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Powiadomienie o zasilaniu nie zostało wyrejestrowane.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli biblioteka DLL zarejestrowana na potrzeby powiadomień o zasilaniu została dynamicznie zwolniona bez wyrejestrowywania.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres rejestracji powiadomień o zasilaniu.
- Parametr 2 - Adres do śledzenia stosu rejestracji. Uruchom adres< dps>, aby wyświetlić stos alokacji.
- Parametr 3 - Adres nazwy biblioteki dll właściciela. Uruchom polecenie du <address> , aby odczytać nazwę biblioteki dll.
- Parametr 4 - Baza biblioteki dll właściciela. Uruchom polecenie .reload <dll_name> = <adres> , aby ponownie załadować bibliotekę dll właściciela. Użyj "lm", aby uzyskać więcej informacji na temat załadowanych i zwolnionych modułów.
- Warstwa testowa: Przeciek
- Identyfikator zatrzymania: POWER_NOTIFICATION
- Kod zatrzymania: 0x905
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania blokad
Wątek nie może być właścicielem sekcji krytycznej.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli wątek (identyfikator wątku jest parametr1) jest przerywany, zawieszony lub znajduje się w stanie (wątek procesu roboczego zakończył element roboczy), w którym nie może przechowywać sekcji krytycznej. Bieżący wątek jest winowajcą. Aby debugować ten przystanek, użyj następujących poleceń debugera:
- kb — aby uzyskać bieżący ślad stosu. Jeśli bieżący wątek jest właścicielem sekcji krytycznej, prawdopodobnie wywołuje element ExitThread. Bieżący wątek powinien zawierać sekcję krytyczną przed zakończeniem pracy. Jeśli bieżący wątek wywołuje funkcję TerminateThread lub SuspendThread, nie powinien to robić dla wątku zawierającego sekcję krytyczną.
- !cs -s <parametr2> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr2> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu ujawnionej sekcji krytycznej.
- dps <parametr4> — aby zrzucić ślad stosu dla tej krytycznej sekcji inicjowania.
- Parametr 1 - Identyfikator wątku.
- Parametr 2 - Krytyczny adres sekcji.
- Parametr 3 - Krytyczny adres informacji debugowania sekcji.
- Parametr 4 -Critical section initialization stack trace (Śledzenie stosu inicjowania sekcji krytycznej).
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: EXIT_THREAD_OWNS_LOCK
- Kod zatrzymania: 0x200
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie biblioteki DLL zawierającej aktywną sekcję krytyczną.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli biblioteka DLL ma zmienną globalną zawierającą sekcję krytyczną, a biblioteka DLL zostanie zwolniona, ale sekcja krytyczna nie została usunięta. Aby debugować ten przystanek, użyj następujących poleceń debugera:
- du <parameter3> — aby zrzucić nazwę winowajcej biblioteki DLL.
- .reload dllname lub .reload dllname = <parameter4> — aby ponownie załadować symbole dla tej biblioteki DLL.
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu ujawnionej sekcji krytycznej.
- dps <parametr2> — aby zrzucić ślad stosu na potrzeby inicjowania tej sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 -Critical section initialization stack trace (Śledzenie stosu inicjowania sekcji krytycznej).
- Parametr 3 -DLL name address (Adres nazwy biblioteki DLL ).
- Parametr 4 - DLL adres podstawowy.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_IN_UNLOADED_DLL
- Kod zatrzymania: 0x201
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie bloku stert zawierającego aktywną sekcję krytyczną.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli alokacja sterty zawiera sekcję krytyczną, alokacja zostanie zwolniona i sekcja krytyczna nie została usunięta. Aby debugować ten przystanek, użyj następujących poleceń debugera:
- !cs -s <(parametr1)> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu ujawnionej sekcji krytycznej.
- dps <parametr2> — aby zrzucić ślad stosu na potrzeby inicjowania tej sekcji krytycznej.
- < parametr3> i <parametr4> mogą pomóc zrozumieć, gdzie przydzielono ten blok sterty (rozmiar alokacji jest prawdopodobnie znaczący).
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 -Critical section initialization stack trace (Śledzenie stosu inicjowania sekcji krytycznej).
- Parametr 3 - Adres bloku stert.
- Parametr 4 - Rozmiar bloku sterty.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_IN_FREED_HEAP
- Kod zatrzymania: 0x202
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Podwójnie zainicjowana lub uszkodzona sekcja krytyczna.
prawdopodobną przyczynąZazwyczaj ten przystanek jest generowany, jeśli sekcja krytyczna została zainicjowana więcej niż raz. W tym przypadku parametr3 i parametr4 to adresy śledzenia stosu dla dwóch z tych inicjalizacji. Czasami można uzyskać ten przystanek, jeśli sekcja krytyczna lub struktura informacji o debugowaniu została uszkodzona. W tym drugim przypadku możliwe, że parametr3 i parametr4 są nieprawidłowe i bezużyteczne. Aby debugować ten przystanek:
- !cs -s -d <parametr2> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Może to pomóc w zidentyfikowaniu sekcji krytycznej, jeśli jest to zmienna globalna.
- dps <parameter3> i dps <parameter4> — aby zidentyfikować dwie ścieżki kodu do inicjowania tej sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Adres struktury informacji debugowania znalezionej na aktywnej liście.
- Parametr 3 - Pierwszy ślad stosu inicjowania.
- Parametr 4 - Drugi ślad stosu inicjowania.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_DOUBLE_INITIALIZE
- Kod zatrzymania: 0x203
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wolna pamięć zawierająca aktywną sekcję krytyczną.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli pamięć zawierająca sekcję krytyczną została zwolniona, ale sekcja krytyczna nie została usunięta przy użyciu metody DeleteCriticalSection. Aby debugować ten przystanek, użyj następujących poleceń debugera:</p.>
- !cs -s -d <parametr2> — zrzut informacji o tej sekcji krytycznej.
- dps <parametr3> — aby zidentyfikować ścieżkę kodu do inicjowania tej sekcji krytycznej.
W większości przypadków weryfikator blokady wykrywa natychmiast wyciek krytycznych sekcji zawartych w alokacji sterty, zakresu bibliotek DLL, alokacji pamięci wirtualnej lub mapViewOfFile mapowanego zakresu pamięci i problemy z różnymi zatrzymaniami w tych przypadkach. Tak więc istnieje bardzo niewiele przypadków pozostawionych dla tego weryfikatora zatrzymać. Blokada musi znajdować się w zakresie pamięci zwolnionym przez kod trybu jądra lub zwolnić proces krzyżowy według interfejsów API, takich jak VirtualFreeEx. Zazwyczaj ten przystanek zostanie napotkany, jeśli poprzedni przystanek (np. LOCK_IN_FREED_HEAP lub LOCK_IN_UNLOADED_DLL) był kontynuowany przez naciśnięcie ciągu "g" w konsoli debugera.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Krytyczny adres informacji debugowania sekcji.
- Parametr 3 -Critical section initialization stack trace (Śledzenie stosu inicjowania sekcji krytycznej).
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_IN_FREED_MEMORY
- Kod zatrzymania: 0x204
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzona sekcja krytyczna.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli pole DebugInfo sekcji krytycznej wskazuje zwolnionej pamięci. Zazwyczaj na liście aktywnej sekcji krytycznej znajduje się inna prawidłowa struktura DebugInfo. Bez uszkodzenia dwa wskaźniki powinny być identyczne. Aby debugować ten przystanek, użyj następujących poleceń debugera:
- !cs -s -d <parametr3> — zrzut informacji o tej sekcji krytycznej na podstawie bieżącej zawartości struktury informacji debugowania znalezionej na aktywnej liście (ta struktura jest rzadko uszkodzona, więc zwykle te informacje są wiarygodne).
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej na podstawie bieżącej zawartości struktury sekcji krytycznej (struktura jest już uszkodzona, więc czasami te informacje nie są wiarygodne).
- dps <parametr4> — aby zidentyfikować ścieżkę kodu do inicjowania tej sekcji krytycznej.
Zrzuć sekcję krytyczną pod <adresem parameter1> i poszukaj wzorca uszkodzenia. Z dobrymi symbolami ntdll.dl można użyć następujących poleceń:
- dt ntdll!_RTL_CRITICAL_SECTION LOCK_ADDRESS
- dt ntdll!_RTL_CRITICAL_SECTION_DEBUG DEBUG_ADDRESS
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Nieprawidłowy adres informacji o debugowaniu tej sekcji krytycznej.
- Parametr 3 - Adres informacji o debugowaniu znalezionych na aktywnej liście.
- Parametr 4 - Inicjalizacja śledzenia stosu.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_CORRUPTED
- Kod zatrzymania: 0x205
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowy wątek właściciela sekcji krytycznej.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli identyfikator wątku właściciela jest nieprawidłowy w bieżącym kontekście. Aby debugować ten przystanek:
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Właściciel wątku.
- Parametr 3 - Oczekiwano wątku własności.
- Parametr 4 - Adres informacyjny debugowania sekcji krytycznej.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_INVALID_OWNER
- Kod zatrzymania: 0x206
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowa liczba rekursji sekcji krytycznej.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli pole liczby rekursji struktury sekcji krytycznej jest nieprawidłowe w bieżącym kontekście. Aby debugować ten przystanek:
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Liczba rekursji.
- Parametr 3 - Oczekiwano liczby rekursji.
- Parametr 4 - Adres informacyjny debugowania sekcji krytycznej.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_INVALID_RECURSION_COUNT
- Kod zatrzymania: 0x207
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Usuwanie sekcji krytycznej z nieprawidłową liczbą blokad.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli sekcja krytyczna jest własnością wątku, jeśli zostanie usunięta lub jeśli sekcja krytyczna jest niezainicjowana. Aby debugować ten przystanek:
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej. Jeśli wątek jest właścicielem 0, sekcja krytyczna nie została zainicjowana.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Zablokuj liczbę.
- Parametr 3 - Oczekiwana liczba blokad.
- Parametr 4 - Właściciel wątku.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_INVALID_LOCK_COUNT
- Kod zatrzymania: 0x208
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sekcja krytyczna została zwolniona lub uszkodzona.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli sekcja krytyczna jest zwalniana więcej razy niż bieżący wątek, który go nabył. Aby debugować ten przystanek:
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej.
- !cs -s -d <parametr4> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Zablokuj liczbę.
- Parametr 3 - Oczekiwana liczba blokad.
- Parametr 4 - Adres informacyjny debugowania sekcji krytycznej.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_OVER_RELEASED
- Kod zatrzymania: 0x209
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sekcja krytyczna nie została zainicjowana.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli jest używana sekcja krytyczna bez inicjowania lub po jego usunięciu. Aby debugować ten przystanek:
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Powinno to pomóc w zidentyfikowaniu sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Adres informacyjny debugowania sekcji krytycznej.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_NOT_INITIALIZED
- Kod zatrzymania: 0x210
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sekcja Krytyczna została już zainicjowana.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli sekcja krytyczna zostanie ponownie zainicjowana przez bieżący wątek. Aby debugować ten przystanek:
- !cs -s parametr1> lub !cs -s -d <<parametr2> — zrzut informacji o tej sekcji krytycznej.
- ln <parametr1> — aby wyświetlić symbole w pobliżu adresu sekcji krytycznej. Może to pomóc w zidentyfikowaniu sekcji krytycznej, jeśli jest to zmienna globalna.
- dps <parametr3> — aby zidentyfikować ścieżkę kodu dla pierwszej inicjalizacji tej sekcji krytycznej.
- kb — aby wyświetlić bieżący ślad stosu, czyli ponowne inicjowanie tej sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Adres informacyjny debugowania sekcji krytycznej.
- Parametr 3 - Pierwszy ślad stosu inicjowania. Użyj programu dps, aby zrzucić go, jeśli nie ma wartości NULL
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_ALREADY_INITIALIZED
- Kod zatrzymania: 0x211
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie pamięci wirtualnej zawierającej aktywną sekcję krytyczną.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli bieżący wątek wywołuje funkcję VirtualFree w bloku pamięci zawierającym aktywną sekcję krytyczną. Aplikacja powinna wywołać metodę DeleteCriticalSection w tej sekcji krytycznej, zanim zwolni tę pamięć.
- kb — aby wyświetlić bieżący ślad stosu, który wywołuje funkcję VirtualFree. Prawdopodobnym winowajcą jest biblioteka DLL, która wywołuje VirtualFree.
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej.
- dps <parametr2> — aby zidentyfikować ścieżkę kodu do inicjowania tej sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 -Critical section initialization stack trace (Śledzenie stosu inicjowania sekcji krytycznej).
- Parametr 3 - Adres bloku pamięci.
- Parametr 4 - Rozmiar bloku pamięci.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_IN_FREED_VMEM
- Kod zatrzymania: 0x212
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Anulowanie mapowania obszaru pamięci zawierającego aktywną sekcję krytyczną.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli bieżący wątek wywołuje polecenie UnmapViewOfFile w bloku pamięci zawierającym aktywną sekcję krytyczną. Aplikacja powinna wywołać metodę DeleteCriticalSection w tej sekcji krytycznej przed usunięciem mapowania tej pamięci.
- kb — aby wyświetlić bieżący ślad stosu, który wywołuje polecenie UnmapViewOfFile . Prawdopodobnym winowajcą jest biblioteka DLL, która wywołuje unmapViewOfFile.
- !cs -s <parametr1> — zrzut informacji o tej sekcji krytycznej.
- dps <parametr2> — aby zidentyfikować ścieżkę kodu do inicjowania tej sekcji krytycznej.
- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 -Critical section initialization stack trace (Śledzenie stosu inicjowania sekcji krytycznej).
- Parametr 3 - Adres bloku pamięci.
- Parametr 4 - Rozmiar bloku pamięci.
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_IN_UNMAPPED_MEM
- Kod zatrzymania: 0x213
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Bieżący wątek nie jest właścicielem żadnych sekcji krytycznych.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli bieżący wątek wywołuje funkcję LeaveCriticalSection, ale zgodnie z wewnętrznym księgowaniem weryfikatora nie jest właścicielem żadnej sekcji krytycznej. Jeśli \<parameter2\> ma wartość zero, prawdopodobnie jest to usterka w bieżącym wątku. Spróbuje opuścić sekcję krytyczną, która nie wprowadzono, lub może wywołać funkcję LeaveCriticalSection więcej razy niż w sekcji EnterCriticalSection dla tej samej sekcji krytycznej. Jeśli \<parameter2\> nie jest zerowy (jest to ujemna liczba całkowita) wewnętrzne struktury danych weryfikatora są prawdopodobnie uszkodzone.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 - Liczba sekcji krytycznych należących do bieżącego wątku.
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: THREAD_NOT_LOCK_OWNER
- Kod zatrzymania: 0x214
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Używanie sekcji krytycznej, która jest prywatna dla innej biblioteki DLL.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli bieżący wątek próbuje użyć prywatnej blokady, która znajduje się wewnątrz innej biblioteki DLL. Na przykład a.dll próbuje wprowadzić sekcję krytyczną zdefiniowaną w ntdll.dll. Nie można używać prywatnych blokad w bibliotekach DLL.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Krytyczny adres sekcji.
- Parametr 2 — Nie jest używany.
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Blokad
- Identyfikator zatrzymania: LOCK_PRIVATE
- Kod zatrzymania: 0x215
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania SRWLock
Blokada SRW nie jest inicjowana.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli wątek próbuje użyć blokady SRW (Param1), która nie jest zainicjowana. Aby debugować ten przystanek, użyj ciągu "kb", aby uzyskać bieżący ślad stosu. W tym miejscu jest używana blokada SRW. Blokada SRW powinna zostać zainicjowana przy użyciu polecenia "InitializeSRWLock", zanim będzie można go użyć.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - SRW Lock
- Parametr 2 - Nieużytne
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: NOT_INITIALIZED
- Kod zatrzymania: 0x250
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Blokada SRW została już zainicjowana.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli blokada SRW (Param1) jest ponownie inicjowana. Jeśli blokada SRW jest aktywnie używana przez inne wątki, ponowne inicjowanie blokady spowoduje nieprzewidywalne zachowanie aplikacji, w tym zawieszanie się i awarie. Ślad stosu inicjowania może pokazać uzyskanie, jeśli blokada SRW została statycznie zainicjowana. Aby debugować ten przystanek:
- kb — aby uzyskać bieżący ślad stosu. W tym miejscu następuje ponowne zainicjowanie blokady SRW.
- dps <parametr3> — aby uzyskać ślad stosu inicjowania funkcji SRW. Ten ślad stosu może pokazać uzyskanie, jeśli blokada została zainicjowana statycznie.
- Parametr 1 - SRW Lock
- Parametr 2 - ThreadId wątku, który zainicjował blokadę SRW.
- Parametr 3 - Adres śledzenia stosu inicjowania. Użyj adresu< dps>, aby zobaczyć, gdzie zainicjowano blokadę SRW.
- Parametr 4 - Nieużytne
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: ALREADY_INITIALIZED
- Kod zatrzymania: 0x251
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Niezgodna Acquire-Release na blokadzie SRW.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli blokada SRW (Param1) jest zwalniana z nieprawidłowym interfejsem API wydania. Jeśli blokada SRW została uzyskana na potrzeby dostępu współdzielonego i jest zwalniana przy użyciu interfejsu API wydania wyłącznego lub blokada SRW została uzyskana w celu uzyskania wyłącznego dostępu i jest zwalniana przy użyciu udostępnionego interfejsu API wydania. Może to spowodować nieprzewidywalne zachowanie aplikacji, w tym zawieszanie się i awarie. Aby debugować ten przystanek:
- kb — aby uzyskać bieżący ślad stosu. W tym miejscu jest zwalniana blokada SRW przy użyciu nieprawidłowego interfejsu API.
- dps <parametr3> — aby uzyskać ślad stosu uzyskiwania blokady SRW.
- Parametr 1 - SRW Lock
- Parametr 2 - ThreadId wątku, który nabył blokadę SRW.
- Parametr 3 - Adres śledzenia stosu uzyskiwania. Użyj adresu< dps>, aby zobaczyć, gdzie została uzyskana blokada SRW.
- Parametr 4 - Nieużytne
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: MISMATCHED_ACQUIRE_RELEASE
- Kod zatrzymania: 0x252
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Blokada SRW jest uzyskiwana rekursywnie przez ten sam wątek.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli blokada SRW (Param1) jest uzyskiwana rekursywnie przez ten sam wątek. Spowoduje to zakleszczenie, a wątek będzie blokowany na czas nieokreślony. Cyklicznego nabycia blokady SRW w trybie wyłączności spowoduje zakleszczenie. Rekursywne uzyskiwanie blokady SRW w trybie udostępnionym spowoduje zakleszczenie, gdy wątek czeka na wyłączny dostęp. Rozważmy poniższy przykład: — Wątek A uzyskuje blokadę SRW w trybie udostępnionym — wątek B próbuje uzyskać blokadę SRW w trybie wyłącznym i czeka — wątek A próbuje uzyskać blokadę SRW w trybie współbieżnym rekursywnie. To powiedzie się tak długo, jak nie ma wyłącznego kelnera (w tym przypadku B). Ponieważ blokady SRW nie mają głodu zapisywania, wątek A czeka za wątkiem B. Teraz, Thread B czeka na Thread A, który z kolei czeka na Thread B powoduje cykliczne oczekiwanie, a tym samym impas. Aby debugować ten przystanek:
- kb — aby uzyskać bieżący ślad stosu. W tym miejscu jest uzyskiwana rekursywnie blokada SRW.
- dps <parametr2> — aby pobrać ślad stosu dla pierwszego pozyskiwania.
- Parametr 1 - SRW Lock
- Parametr 2 - Adres pierwszego śledzenia stosu uzyskiwania. Użyj adresu< dps>, aby zobaczyć, gdzie została uzyskana blokada SRW.
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: RECURSIVE_ACQUIRE
- Kod zatrzymania: 0x253
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wątek, który kończy działanie lub jest przerywany, jest właścicielem blokady SRW.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli wątek (Param2), który jest właścicielem blokady SRW (Param1) jest zamykany lub jest przerywany. Spowoduje to zablokowanie oddzielonej blokady SRW, a wątki próbujące uzyskać tę blokadę będą blokować na czas nieokreślony. Aby debugować jego zatrzymanie:
- kb — aby uzyskać bieżący ślad stosu. Jest to miejsce, w którym wątek kończy działanie lub jest przerywany.
- dps< parametr3> — aby uzyskać ślad stosu uzyskiwania blokady SRW.
- Parametr 1 - SRW Lock
- Parametr 2 - ThreadId wątku, który kończy lub jest przerywany.
- Parametr 3 - Adres śledzenia stosu uzyskiwania. Użyj adresu< dps>, aby zobaczyć, gdzie została uzyskana blokada SRW.
- Parametr 4 - Nieużytne
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: EXIT_THREAD_OWNS_LOCK
- Kod zatrzymania: 0x254
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalniana blokada SRW nie została pobrana przez ten wątek.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli blokada SRW (Param1) jest zwalniana przez wątek (Param2), który nie nabył blokady. Reprezentuje to złą praktykę programową, która jest trudna do uzyskania właściwego działania i może prowadzić do nieprzewidywalnego zachowania aplikacji. Aby debugować ten przystanek:
- kb — aby uzyskać bieżący ślad stosu. W tym miejscu wątek zwalnia blokadę SRW, której nie nabył.
- dps <parametr4> — aby uzyskać ślad stosu uzyskiwania blokady SRW.
- Parametr 1 - SRW Lock
- Parametr 2 - Current ThreadId.
- Parametr 3 - ThreadId wątku, który nabył blokadę SRW.
- Parametr 4 - Adres śledzenia stosu uzyskiwania. Użyj adresu< dps>, aby zobaczyć, gdzie została uzyskana blokada SRW.
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: INVALID_OWNER
- Kod zatrzymania: 0x255
- ważność : ostrzeżenie
- błąd jednorazowy :
- raport o błędach : None
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwolniona pamięć zawiera aktywną blokadę SRW.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli zwalniany adres pamięci (Param1) zawiera aktywną blokadę SRW, która jest nadal używana. Może to spowodować nieprzewidywalne zachowanie aplikacji, w tym awarie i zawieszenie. Aby debugować ten przystanek:
- kb — aby uzyskać bieżący ślad stosu. W tym miejscu zwalniana jest pamięć zawierająca aktywną blokadę SRW.
- dps <parametr4> — aby uzyskać ślad stosu uzyskiwania blokady SRW.
- Parametr 1 - SRW Lock
- Parametr 2 - Adres zwalnianej pamięci.
- Parametr 3 - ThreadId wątku, który nabył blokadę SRW.
- Parametr 4 - Adres śledzenia stosu uzyskiwania. Użyj adresu< dps>, aby zobaczyć, gdzie została uzyskana blokada SRW.
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: IN_FREED_MEMORY
- Kod zatrzymania: 0x256
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalniana biblioteka DLL zawiera aktywną blokadę SRW.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli biblioteka DLL jest zwalniana (Param2) zawiera aktywną blokadę SRW (Param1), która jest nadal używana. Może to spowodować nieprzewidywalne zachowanie aplikacji, w tym awarie i zawieszenie. Aby debugować ten przystanek:
- kb — aby uzyskać bieżący ślad stosu. W tym miejscu jest zwalniana biblioteka DLL, która zawiera aktywną blokadę SRW.
- du <parameter2> — aby znaleźć nazwę biblioteki DLL, która jest zwalniana.
- dps <parametr4> — aby uzyskać ślad stosu uzyskiwania blokady SRW.
- Parametr 1 - SRW Lock
- Parametr 2 - Adres nazwy zwalnianej biblioteki DLL. Użyj du <address> , aby wyświetlić nazwę.
- Parametr 3 - ThreadId wątku, który nabył blokadę SRW.
- Parametr 4 - Adres śledzenia stosu uzyskiwania. Użyj adresu< dps>, aby zobaczyć, gdzie została uzyskana blokada SRW.
- Warstwa testowa: SRWLock
- Identyfikator zatrzymania: IN_UNLOADED_DLL
- Kod zatrzymania: 0x257
- ważność : ostrzeżenie
- błąd jednorazowy :
- raport o błędach : None
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania pamięci
Zwalnianie bloku pamięci wirtualnej o nieprawidłowym rozmiarze lub adresie początkowym.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje virtualfree lub dll zwolnić z nieprawidłowym adresem początkowym lub rozmiarem alokacji pamięci. W przypadku zwolnienia biblioteki DLL prawdopodobnie oznacza to uszkodzenie pamięci na załadowanej liście bibliotek DLL. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu oraz adresowi pamięci i rozmiarowi, który ma zostać zwolniony, i spróbuj ustalić, dlaczego są one nieprawidłowe.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres podstawowy alokacji.
- Parametr 2 - Rozmiar regionu pamięci.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_FREEMEM
- Kod zatrzymania: 0x600
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowe wirtualne wywołanie aloku.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli weryfikator aplikacji wykryje wywołanie VirtualAlloc z nieprawidłowym adresem początkowym lub rozmiarem alokacji pamięci. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) oraz adresowi pamięci i rozmiarowi, który ma zostać przydzielony, i spróbuj ustalić, dlaczego są one nieprawidłowe.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Wskaźnik do adresu podstawowego alokacji.
- Parametr 2 - Wskaźnik do rozmiaru regionu pamięci.
- Parametr 3 - Nieużytne
- Parametr 4 - Nieużytne
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_ALLOCMEM
- Kod zatrzymania: 0x601
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowe wywołanie widoku mapy.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie MapViewOfFile z nieprawidłowym adresem podstawowym lub rozmiarem mapowania. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) oraz adresowi pamięci i rozmiarowi, który ma zostać zamapowany, i spróbuj ustalić, dlaczego są one nieprawidłowe.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Wskaźnik do mapowania adresu podstawowego.
- Parametr 2 - Wskaźnik do wyświetlania rozmiaru.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_MAPVIEW
- Kod zatrzymania: 0x602
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sondowanie nieprawidłowego adresu.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie IsBadXXXPtr z nieprawidłowym adresem (np. adresem trybu jądra, a nie normalnym adresem trybu użytkownika) dla buforu pamięci do sondowania. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj ustalić, dlaczego obiekt wywołujący funkcji IsBadXXXPtr zakończył się nieprawidłowym adresem. Wiele razy adres jest zwykłym fałszywym, np. niezainicjowanym wskaźnikiem. Biblioteka MSDN zawiera listę kilku powodów, dla których aplikacje nie powinny używać interfejsów API IsBadXXXPtr: W środowisku wielozadaniowym z wyprzedzeniem istnieje możliwość zmiany dostępu procesu do testowanej pamięci. Wyłuszczenie potencjalnie nieprawidłowych wskaźników może wyłączyć rozszerzanie stosu w innych wątkach. Wątek wyczerpujący stos, gdy rozszerzenie stosu zostało wyłączone, powoduje natychmiastowe zakończenie procesu nadrzędnego bez wyskakującego okna błędów ani informacji diagnostycznych. Oczekuje się, że wątki w procesie będą współpracować w taki sposób, aby nie zwolnić pamięci, której potrzebuje druga. Użycie tej funkcji nie neguje konieczności wykonania tej czynności. Jeśli nie zostanie to zrobione, aplikacja może zakończyć się niepowodzeniem w nieprzewidywalny sposób. Ze względu na wszystkie te powody zalecamy, aby nigdy nie używać tych interfejsów API.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres początkowy.
- Parametr 2 - Rozmiar bloku pamięci.
- Parametr 3 - Nieprawidłowy adres.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: PROBE_INVALID_ADDRESS
- Kod zatrzymania: 0x603
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sondowanie wolnej pamięci.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie IsBadXXXPtr dla alokacji pamięci, która jest bezpłatna. Jest to bardzo złe, ponieważ istnieje możliwość, że w niektórych innych przypadkach ta pamięć została już ponownie użyta dla innej alokacji. Ponieważ bieżąca ścieżka kodu (kb) nie jest właścicielem tej pamięci, może to spowodować uszkodzenie pamięci innej osoby z katastrofalnymi skutkami. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj ustalić, dlaczego obiekt wywołujący funkcji IsBadXXXPtr zakończył sondowanie wolnej pamięci. Adres może być zwykłymi fałszywymi (np. niezainicjowanym wskaźnikiem) lub być może już zwolnioną pamięcią. Jeśli pamięć została już zwolniona przez jeden z interfejsów API VirtualFree lub UnmapViewOfFile, '!avrf -vs -a parametr3' wyszuka dziennik śladów stosu ścieżek kodu, które przydzielone/zwolniły ten adres i wyświetli te ślady stosu, jeśli są dostępne. Może to spowodować wyświetlenie śladu stosu, który zwolnił tę pamięć. Częściej pamięć jest już zwalnianą alokacją sterty. Aby sprawdzić, czy istnieje taka możliwość, "!avrf -hp -a parametr3" wyszuka dziennik śladów stosu ścieżek kodu, które przydzieliły/zwolniły ten adres z/do sterta i wyświetli te ślady stosu, jeśli są dostępne. Biblioteka MSDN zawiera listę kilku powodów, dla których aplikacje nie powinny używać interfejsów API IsBadXXXPtr: W środowisku wielozadaniowym z wyprzedzeniem istnieje możliwość zmiany dostępu procesu do testowanej pamięci. Wyłuszczenie potencjalnie nieprawidłowych wskaźników może wyłączyć rozszerzanie stosu w innych wątkach. Wątek wyczerpujący stos, gdy rozszerzenie stosu zostało wyłączone, powoduje natychmiastowe zakończenie procesu nadrzędnego bez wyskakującego okna błędów ani informacji diagnostycznych. Oczekuje się, że wątki w procesie będą współpracować w taki sposób, aby nie zwolnić pamięci, której potrzebuje druga. Użycie tej funkcji nie neguje konieczności wykonania tej czynności. Jeśli nie zostanie to zrobione, aplikacja może zakończyć się niepowodzeniem w nieprzewidywalny sposób. Ze względu na wszystkie te powody zalecamy, aby nigdy nie używać tych interfejsów API.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres początkowy.
- Parametr 2 - Rozmiar bloku pamięci.
- Parametr 3 - Adres strony wolnej pamięci.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: PROBE_FREE_MEM
- Kod zatrzymania: 0x604
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sondowanie strony straży.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie IsBadXXXPtr dla alokacji pamięci zawierającej co najmniej jedną GUARD_PAGE. Jest to bardzo złe, ponieważ jest to bardzo możliwe, że ta GUARD_PAGE jest końcem bieżącego stosu wątku. Zgodnie z dokumentacją w bibliotece MSDN: wyłusanie potencjalnie nieprawidłowych wskaźników może wyłączyć rozszerzanie stosu w innych wątkach. Wątek wyczerpujący stos, gdy rozszerzenie stosu zostało wyłączone, powoduje natychmiastowe zakończenie procesu nadrzędnego bez wyskakującego okna błędów ani informacji diagnostycznych. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj ustalić, dlaczego obiekt wywołujący funkcji IsBadXXXPtr zakończył sondowanie GUARD_PAGE. Biblioteka MSDN zawiera listę kilku powodów, dla których aplikacje nie powinny używać interfejsów API IsBadXXXPtr: W środowisku wielozadaniowym z wyprzedzeniem istnieje możliwość zmiany dostępu procesu do testowanej pamięci. Wyłuszczenie potencjalnie nieprawidłowych wskaźników może wyłączyć rozszerzanie stosu w innych wątkach. Wątek wyczerpujący stos, gdy rozszerzenie stosu zostało wyłączone, powoduje natychmiastowe zakończenie procesu nadrzędnego bez wyskakującego okna błędów ani informacji diagnostycznych. Oczekuje się, że wątki w procesie będą współpracować w taki sposób, aby nie zwolnić pamięci, której potrzebuje druga. Użycie tej funkcji nie neguje konieczności wykonania tej czynności. Jeśli nie zostanie to zrobione, aplikacja może zakończyć się niepowodzeniem w nieprzewidywalny sposób. Ze względu na wszystkie te powody zalecamy, aby nigdy nie używać tych interfejsów API.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres początkowy.
- Parametr 2 - Rozmiar bloku pamięci.
- Parametr 3 - Adres strony straży.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: PROBE_GUARD_PAGE
- Kod zatrzymania: 0x605
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sondowanie adresu NULL.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie IsBadXXXPtr z adresem NULL. Aby debugować ten przystanek, spójrz na bieżący ślad stosu (kb) i spróbuj ustalić, dlaczego obiekt wywołujący funkcji IsBadXXXPtr zakończył się adresem NULL. Zazwyczaj jest to znak, że ktoś nie sprawdza wartości zwracanej jednej z funkcji alokacji pamięci. Na przykład poniższy kod jest niepoprawny:
void Use(PVOID p);
int main(void) {
PVOID p;
p = malloc(1024);
Use(p);
return 0;
}
void Use(PVOID p) {
if (IsBadReadPtr(p)) {
return;
}
// p is safe to be used here.
}
Ten kod powinien zostać ponownie napisany w następujący sposób:
int main (void)
{
PVOID p;
p = malloc (1024);
if (NULL == p)) {
return -1;
}
Use (p);
return 0;
}
void Use (PVOID p)
{
//
// p is safe to be used here.
//
}
Biblioteka MSDN zawiera listę kilku powodów, dla których aplikacje nie powinny używać interfejsów API IsBadXXXPtr: W środowisku wielozadaniowym z wyprzedzeniem istnieje możliwość zmiany dostępu procesu do testowanej pamięci. Wyłuszczenie potencjalnie nieprawidłowych wskaźników może wyłączyć rozszerzanie stosu w innych wątkach. Wątek wyczerpujący stos, gdy rozszerzenie stosu zostało wyłączone, powoduje natychmiastowe zakończenie procesu nadrzędnego bez wyskakującego okna błędów ani informacji diagnostycznych. Oczekuje się, że wątki w procesie będą współpracować w taki sposób, aby nie zwolnić pamięci, której potrzebuje druga. Użycie tej funkcji nie neguje konieczności wykonania tej czynności. Jeśli nie zostanie to zrobione, aplikacja może zakończyć się niepowodzeniem w nieprzewidywalny sposób. Ze względu na wszystkie te powody zalecamy, aby nigdy nie używać tych interfejsów API.
informacje wyświetlane przez weryfikatora aplikacji- parametr 1 — Nie jest używany.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: PROBE_NULL
- Kod zatrzymania: 0x606
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Sondowanie bloku pamięci z nieprawidłowym adresem początkowym lub rozmiarem.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie IsBadXXXPtr z nieprawidłowym adresem początkowym (np. adresem trybu jądra, a nie normalnym adresem trybu użytkownika) lub nieprawidłowym rozmiarem buforu pamięci do sondowania. Aby debugować ten przystanek, sprawdź bieżący ślad stosu (kb) i spróbuj ustalić, dlaczego obiekt wywołujący funkcji IsBadXXXPtr zakończył się nieprawidłowym adresem lub rozmiarem. Wiele razy adres lub rozmiar są zwykłymi fałszywymi, np. niezainicjowanymi zmiennymi. Biblioteka MSDN zawiera listę kilku powodów, dla których aplikacje nie powinny używać interfejsów API IsBadXXXPtr: W środowisku wielozadaniowym z wyprzedzeniem istnieje możliwość zmiany dostępu procesu do testowanej pamięci. Wyłuszczenie potencjalnie nieprawidłowych wskaźników może wyłączyć rozszerzanie stosu w innych wątkach. Wątek wyczerpujący stos, gdy rozszerzenie stosu zostało wyłączone, powoduje natychmiastowe zakończenie procesu nadrzędnego bez wyskakującego okna błędów ani informacji diagnostycznych. Oczekuje się, że wątki w procesie będą współpracować w taki sposób, aby nie zwolnić pamięci, której potrzebuje druga. Użycie tej funkcji nie neguje konieczności wykonania tej czynności. Jeśli nie zostanie to zrobione, aplikacja może zakończyć się niepowodzeniem w nieprzewidywalny sposób. Ze względu na wszystkie te powody zalecamy, aby nigdy nie używać tych interfejsów API.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres początkowy.
- Parametr 2 - Rozmiar bloku pamięci.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: PROBE_INVALID_START_OR_SIZE
- Kod zatrzymania: 0x607
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie biblioteki DLL z nieprawidłowym rozmiarem lub adresem początkowym.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje zwalnianie biblioteki DLL z nieprawidłowym adresem początkowym lub rozmiarem zakresu pamięci biblioteki DLL. Prawdopodobnie oznacza to uszkodzenie pamięci wewnątrz wewnętrznej ntdll.dll załadowanej listy bibliotek DLL.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - DLL adres podstawowy pamięci.
- Parametr 2 - DLL rozmiar zakresu pamięci.
- Parametr 3 -DLL name address (Adres nazwy biblioteki DLL ). Użyj zrzutu, aby go zrzucić.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_DLL_RANGE
- Kod zatrzymania: 0x608
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie bloku pamięci wewnątrz zakresu adresów stosu bieżącego wątku.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wirtualny blok pamięci, który jest faktycznie częścią stosu bieżącego wątku (!). Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj zrozumieć, dlaczego funkcja o nazwie VirtualFree myślała, że blok pamięci został dynamicznie przydzielony lub zamapowany, ale w rzeczywistości pamięć przydzielona ze stosu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres podstawowy alokacji.
- Parametr 2 - Rozmiar regionu pamięci.
- Parametr 3 - Adres niskiego limitu stosu.
- Parametr 4 - Adres wysokiego limitu stosu.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: FREE_THREAD_STACK_MEMORY
- Kod zatrzymania: 0x609
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowy parametr FreeType dla operacji VirtualFree.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje virtualfree z nieprawidłową wartością parametru FreeType. Jedyne dwie dopuszczalne wartości tego parametru to MEM_DECOMMIT i MEM_RELEASE. Jeśli funkcja VirtualFree jest wywoływana z dowolną inną wartością z wyjątkiem tych dwóch, usługa VirtualFree nie zwolni pamięci. Aby debugować ten przystanek, spójrz na bieżący ślad stosu (kb): obiekt wywołujący VirtualFree jest prawdopodobnie winowajcą.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Niepoprawna wartość używana przez aplikację.
- Parametr 2 - Oczekiwano poprawnej wartości 1.
- Parametr 3 - Oczekiwano poprawnej wartości 2.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_FREE_TYPE
- Kod zatrzymania: 0x60A
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Próba zwolnienia bloku pamięci wirtualnej, który jest już bezpłatny.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wirtualnyfree dla adresu, który jest już bezpłatny. Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj ustalić, dlaczego pamięć jest już bezpłatna, ale aplikacja próbuje go zwolnić ponownie. '!avrf -vs -a parametr1" wyszuka dziennik śladów stosu ścieżek kodu, które przydzielono/zwolnił ten adres i wyświetli te ślady stosu, jeśli są dostępne. Może to spowodować wyświetlenie śladu stosu, który zwolnił tę pamięć.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres bloku pamięci.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: MEM_ALREADY_FREE
- Kod zatrzymania: 0x60B
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowy parametr rozmiaru dla operacji VirtualFree (MEM_RELEASE).
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje virtualfree (MEM_RELEASE) z wartością inną niż zero dla parametru dwSize. W przypadku używania MEM_RELEASE jedyną akceptowalną wartością tego parametru jest 0. Jeśli funkcja VirtualFree jest wywoływana z dowolną inną wartością z wyjątkiem 0, virtualfree nie zwolni pamięci. Aby debugować ten przystanek, spójrz na bieżący ślad stosu (kb): obiekt wywołujący VirtualFree jest prawdopodobnie winowajcą.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Niepoprawny rozmiar używany przez aplikację.
- Parametr 2 - Oczekiwano poprawnego rozmiaru (0).
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_FREE_SIZE
- Kod zatrzymania: 0x60C
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieoczekiwany wyjątek zgłoszony w procedurze punktu wejścia biblioteki DLL.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli funkcja punktu wejścia biblioteki DLL (DllMain) zgłasza wyjątek. Jednym z przykładów, dlaczego jest to złe, jest to: jeśli biblioteka DllMain(DLL_PROCESS_ATTACH) zgłasza wyjątek, moduł ładujący dll systemu Windows będzie: — przechwyć i ukryć wyjątek; — Zwalnianie biblioteki DLL bez wywoływania jej biblioteki DllMain(DLL_PROCESS_DETACH). W wielu przypadkach biblioteka DLL przydzieliła już niektóre zasoby, a następnie zgłosiła wyjątek i nie będzie miała możliwości wydania tych zasobów w dllMain (DLL_PROCESS_DETACH). Aby debugować ten przystanek:
- **du \<*parametr1*\>** — aby wyświetlić nazwę biblioteki DLL. - **.exr \<*parametr2*\>** — aby wyświetlić informacje o wyjątku. - **.cxr \<**parameter3*\>** i **kb** — aby wyświetlić informacje kontekstowe wyjątku i ślad stosu w czasie zgłoszenia wyjątku. - **\<*parametr4*\>** jest adresem wewnętrznej struktury weryfikatora i nie ma żadnego znaczenia dla większości użytkowników weryfikatora. informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - DLL name (użyj zrzutu, aby go zrzucić).
- Parametr 2 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 3 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Parametr 4 - Weryfikator dll deskryptor
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: DLL_UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0x60D
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieoczekiwany wyjątek zgłoszony w funkcji wątku.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli funkcja wątku zgłasza wyjątek. Jest to złe, ponieważ cały proces zostanie zabity. Aby debugować ten przystanek:
- < parametr1> może być znaczący dla typu wyjątku. Na przykład kod wyjątku C0000005 oznacza naruszenie dostępu.
- .exr <parameter2> — aby wyświetlić informacje o wyjątku.
- .cxr <parametr3> , a następnie kb — aby wyświetlić informacje kontekstowe wyjątku
- Parametr 1 - Kod wyjątku.
- Parametr 2 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 3 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: THREAD_UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0x60E
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieoczekiwany wyjątek zgłoszony podczas sondowania pamięci.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli otrzymamy wyjątek podczas wywołania IsBadXXXPtr. Oznacza to, że bufor pamięci, który sondujemy, nie ma ochrony zakładanej przez obiekt wywołujący lub że pamięć została już zwolniona itp. Zapoznaj się z powyższym omówieniem innego kodu zatrzymania (PROBE_INVALID_ADDRESS, PROBE_FREE_MEM, PROBE_GUARD_PAGE, PROBE_NULL, PROBE_INVALID_START_OR_SIZE), aby uzyskać więcej przykładów, dlaczego używanie interfejsów API IsBadXXXPtr nie jest zalecane. Aby debugować ten przystanek:
- < parametr1> zazwyczaj będzie C0000005, naruszenie dostępu
- .exr <parameter2> — aby wyświetlić informacje o wyjątku
- .cxr <parametr3> , a następnie kb — aby wyświetlić informacje o kontekście wyjątku i ślad stosu w momencie zgłoszenia wyjątku
- Parametr 1 - Kod wyjątku.
- Parametr 2 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 3 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Parametr 4 - Nieużytne
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: PROBE_UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0x60F
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Próba zresetowania adresu NULL.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje wywołanie VirtualFree (MEM_RESET) z pierwszym parametrem o wartości NULL. MEM_RESET należy używać tylko dla już przydzielonej pamięci, więc wartość NULL nie jest prawidłowym pierwszym parametrem w tym przypadku.
informacje wyświetlane przez weryfikatora aplikacji- parametr 1 — Nie jest używany.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_MEM_RESET
- Kod zatrzymania: 0x610
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie bloku pamięci stertowej wewnątrz zakresu adresów stosu bieżącego wątku.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje heapFree dla bloku pamięci, który jest faktycznie częścią stosu bieżącego wątku (!). Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj zrozumieć, dlaczego funkcja o nazwie HeapFree uważała, że blok pamięci został dynamicznie przydzielony lub zamapowany, ale w rzeczywistości została przydzielona pamięć ze stosu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres podstawowy alokacji.
- Parametr 2 - Rozmiar regionu pamięci.
- Parametr 3 - Adres niskiego limitu stosu.
- Parametr 4 - Adres wysokiego limitu stosu.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: FREE_THREAD_STACK_MEMORY_AS_HEAP
- Kod zatrzymania: 0x612
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Usuń mapowanie obszaru pamięci wewnątrz zakresu adresów stosu bieżącego wątku.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli weryfikator aplikacji wykryje obiekt UnmapViewOfFile dla bloku pamięci, który jest faktycznie częścią stosu bieżącego wątku (!). Aby debugować ten przystanek, przyjrzyj się bieżącemu śladowi stosu (kb) i spróbuj zrozumieć, dlaczego funkcja o nazwie UnmapViewOfFile uważała, że blok pamięci został dynamicznie przydzielony lub zamapowany, ale faktycznie została przydzielona pamięć ze stosu.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres podstawowy alokacji.
- Parametr 2 - Rozmiar regionu pamięci.
- Parametr 3 - Adres niskiego limitu stosu.
- Parametr 4 - Adres wysokiego limitu stosu.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: FREE_THREAD_STACK_MEMORY_AS_MAP
- Kod zatrzymania: 0x613
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowy adres RTL_RESOURCE.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli aplikacja próbuje użyć wartości NULL lub innego nieprawidłowego adresu (np. adresu trybu jądra) jako adresu prawidłowego obiektu. RtlInitializeResource (NULL) to nieprawidłowe wywołanie interfejsu API, które spowoduje wyzwolenie tego rodzaju zatrzymania weryfikatora. *Parametr1* jest niepoprawnym adresem, a winowajca znajduje się na ślad stosu (wyświetl go z kb).
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_RESOURCE_ADDRESS
- Kod zatrzymania: 0x614
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprawidłowy adres sekcji krytycznej.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli aplikacja próbuje użyć wartości NULL lub innego nieprawidłowego adresu (np. adresu trybu jądra) jako adresu prawidłowego obiektu. EnterCriticalSection(NULL) to nieprawidłowe wywołanie interfejsu API, które spowoduje wyzwolenie tego rodzaju zatrzymania weryfikatora. *Parametr1* jest niepoprawnym adresem, a winowajca znajduje się na ślad stosu (wyświetl go z kb).
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Adres.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_CRITSECT_ADDRESS
- Kod zatrzymania: 0x615
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Spróbuj wykonać kod w pamięci nie wykonywalnej.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli aplikacja próbuje uruchomić kod z adresu, który nie jest wykonywalny lub bezpłatny. Aby debugować ten przystanek:
- u <parametr2> — aby usunąć winowajcę kodu
- .exr <parameter3> — aby wyświetlić informacje o wyjątku
- .cxr <parametr4> , a następnie kb — aby wyświetlić informacje kontekstowe wyjątku i ślad stosu w czasie zgłoszenia wyjątku.
- Parametr 1 - Adres, do których uzyskuje się dostęp.
- Parametr 2 - Kod wykonujący nieprawidłowy dostęp.
- Parametr 3 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 4 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: THREAD_UNEXPECTED_EXCEPTION_CODE
- Kod zatrzymania: 0x616
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieoczekiwany wyjątek zgłoszony podczas inicjowania buforu wyjściowego.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli otrzymamy wyjątek podczas inicjowania buforu określonego jako parametr wyjściowy dla interfejsu API Win32 lub CRT. Zazwyczaj oznacza to, że określony rozmiar buforu wyjściowego jest niepoprawny. Aby debugować ten przystanek:
- .exr <parameter3> — aby wyświetlić informacje o wyjątku.
- .cxr <parametr4> , a następnie kb — aby wyświetlić informacje kontekstowe wyjątku i ślad stosu w czasie zgłoszenia wyjątku.
- Parametr 1 - Bufor adresu początkowego.
- Parametr 2 - Rozmiar buforu.
- Parametr 3 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 4 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: OUTBUFF_UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0x617
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieoczekiwany wyjątek podczas próby znalezienia rozmiaru bloku sterty.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli otrzymamy wyjątek podczas wywoływania funkcji HeapSize dla bloku stert, który jest zwalniany. Zazwyczaj oznacza to, że określony adres bloku sterty jest niepoprawny lub sterta jest uszkodzona. Aby debugować ten przystanek:
- .exr <parameter3> — aby wyświetlić rekord wyjątku.
- .cxr <parametr4> , a następnie kb — aby wyświetlić informacje kontekstowe wyjątku i ślad stosu w czasie zgłoszenia wyjątku.
- Parametr 1 - Adres zwalnianego bloku stert.
- Parametr 2 - Uchwyt stertowy.
- Parametr 3 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 4 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: SIZE_HEAP_UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0x618
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zwalnianie bloku pamięci z nieprawidłowym adresem początkowym.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli program wywołuje funkcję VirtualFree (MEM_RELEASE) z parametrem lpAddress, który nie jest adresem podstawowym zwracanym przez funkcję VirtualAlloc lub VirtualAllocEx, gdy region stron był zarezerwowany; Aby debugować ten przystanek:
- kb — aby wyświetlić bieżący ślad stosu, który wywołuje funkcję VirtualFree. Prawdopodobnym winowajcą jest biblioteka DLL, która wywołuje VirtualFree.
- Parametr 1 - Adres zwalnianego bloku pamięci.
- Parametr 2 - Oczekiwano poprawnego adresu bloku pamięci.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_FREEMEM_START_ADDRESS
- Kod zatrzymania: 0x619
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Usuń mapowanie bloku pamięci z nieprawidłowym adresem początkowym.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli program wywołuje polecenie UnmapViewOfFile z parametrem lpBaseAddress, który nie jest identyczny z wartością zwróconą przez poprzednie wywołanie funkcji MapViewOfFile lub MapViewOfFileEx. Aby debugować ten przystanek:
- kb — aby wyświetlić bieżący ślad stosu, który wywołuje metodę UnmapViewOfFile. Prawdopodobnym winowajcą jest biblioteka DLL, która wywołuje unmapViewOfFile.
- Parametr 1 - Adres niezamapowanego bloku pamięci.
- Parametr 2 - Oczekiwano poprawnego adresu bloku pamięci.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: INVALID_UNMAPVIEW_START_ADDRESS
- Kod zatrzymania: 0x619
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
nieoczekiwany wyjątek zgłoszony w funkcji wywołania zwrotnego puli wątków.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli funkcja wywołania zwrotnego w wątku puli wątków zgłasza wyjątek. Aby debugować ten przystanek:
- < parametr1> może być znaczący dla typu wyjątku. Na przykład kod wyjątku C0000005 oznacza naruszenie dostępu.
- .exr <parameter2> — aby wyświetlić informacje o wyjątku.
- .cxr <parametr3> , a następnie kb — aby wyświetlić informacje kontekstowe wyjątku.
- Parametr 1 - Kod wyjątku
- Parametr 2 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić
- Parametr 3 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić
- Parametr 4 - Nieużytne
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: THREADPOOL_UNEXPECTED_EXCEPTION
- Kod zatrzymania: 0x61B
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
kod w pamięci nie wykonywalnej
prawdopodobną przyczynąTen przystanek jest generowany, jeśli aplikacja próbuje uruchomić kod z adresu, który nie jest wykonywalny lub bezpłatny. Aby debugować ten przystanek:
- u <parametr2> — aby usunąć winowajcę kodu
- .exr <parameter3> — aby wyświetlić informacje o wyjątku
- .cxr <parametr4> , a następnie kb — aby wyświetlić informacje kontekstowe wyjątku i ślad stosu w czasie zgłoszenia wyjątku.
- Parametr 1 - Adres, do których uzyskuje się dostęp
- Parametr 2 - Kod wykonujący nieprawidłowy dostęp
- Parametr 3 - Rekord wyjątku. Użyj polecenia .exr, aby go wyświetlić.
- Parametr 4 - Rekord kontekstu. Użyj narzędzia .cxr, aby go wyświetlić.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: THREADPOOL_UNEXPECTED_EXCEPTION_CODE
- Kod zatrzymania: 0x61C
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Tworzenie sterta wykonywalnego.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli aplikacja tworzy stertę wykonywalną. Może to być zagrożenie bezpieczeństwa.
informacje wyświetlane przez weryfikatora aplikacji- parametr 1 — Nie jest używany.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: EXECUTABLE_HEAP
- Kod zatrzymania: 0x1D
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Przydzielanie pamięci wykonywalnej.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli aplikacja przydziela pamięć wykonywalną. Może to być zagrożenie bezpieczeństwa.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Ochrona strony określona przez obiekt wywołujący.
- Parametr 2 — Nie jest używany.
- Parametr 3 — Nie jest używany.
- Parametr 4 — Nie jest używany.
- Warstwa testowa: Pamięć
- Identyfikator zatrzymania: EXECUTABLE_MEMORY
- Kod zatrzymania: 0x1E
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania protokołu TLS
Zwalnianie biblioteki DLL, która przydzielała indeks TLS, który nie został zwolniony.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli biblioteka DLL, która przydzieliła indeks TLS, jest zwalniana przed zwolnieniem tego indeksu TLS. Aby debugować ten przystanek:
- du <parameter3> — wyświetlanie nazwy winowajcej biblioteki DLL
- .reload xxx.dll=<parameter4> — ponowne ładowanie symboli dla winy DLL (w razie potrzeby). xxx.dll to nazwa biblioteki DLL wyświetlanej w powyższym kroku.
- u <parametr2> — dezasembluje kod, który przydzielił protokół TLS. Powinno to wskazywać funkcję, która przydzieliła protokół TLS, ale nie zapomniała zwolnić go przed zwolnieniem biblioteki DLL.
- Parametr 1 - Indeks TLS
- Parametr 2 - Adres kodu, który przydzielił ten indeks TLS.
- Parametr 3 -DLL name address (Adres nazwy biblioteki DLL ). Użyj zrzutu, aby go zrzucić.
- Parametr 4 - DLL adres podstawowy.
- Warstwa testowa: TLS
- Identyfikator zatrzymania: TLS_LEAK
- Kod zatrzymania: 0x350
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Uszkodzona struktura protokołu TLS weryfikatora.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli wewnętrzne struktury weryfikatora używane do przechowywania stanu miejsc protokołu TLS dla wątku są uszkodzone. Bardzo prawdopodobne jest to z powodu niektórych losowych uszkodzeń w procesie.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - ADRES TEB.
- Parametr 2 - Oczekiwany adres TEB.
- Parametr 3 - Identyfikator wątku.
- Parametr 4 - Oczekiwany identyfikator wątku.
- Warstwa testowa: TLS
- Identyfikator zatrzymania: CORRUPTED_TLS
- Kod zatrzymania: 0x351
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Używanie nieprawidłowego indeksu TLS.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli jest używany nieprawidłowy indeks TLS. W większości przypadków jest to spowodowane tym, że kod nadal używa tego indeksu, gdy jest wywoływany protokół TlsFree. Oto przykład wątku wątku wątku.
- T1: Ładuje biblioteki DLL i TlsAlloc
- T1: Wywołanie zwrotne kolejki
- T1: Pominięto oczekiwanie/anulowane wywołanie zwrotne
- T1: TlsFree
- T2: Wywołanie zwrotne jest uruchamiane i wywołuje metodę TlsSetValue
- T1: Zwalnianie biblioteki DLL
- Parametr 1 - Indeks TLS
- Parametr 2 - Nieużytne.
- Parametr 3 - Nieużytne.
- Parametr 4 - Nieużytne.
- Warstwa testowa: TLS
- Identyfikator zatrzymania: INVALID_TLS_INDEX
- Kod zatrzymania: 0x352
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Szczegóły zatrzymania puli wątków
Priorytet tego wątku wątku został zmieniony.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli priorytet wątku zostanie zmieniony po powrocie do puli wątków.
informacje wyświetlane przez weryfikatora aplikacji- Format: - threadpool thread (%x) po wykonaniu wywołania zwrotnego (%p) ma zmieniony priorytet wątku (%i -> %i)
- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Bieżący priorytet.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: INCONSISTENT_PRIORITY
- Kod zatrzymania: 0x700
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Koligacja tego wątku wątku została zmieniona.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli koligacja wątku zostanie zmieniona po powrocie do puli wątków.
informacje wyświetlane przez weryfikatora aplikacji- Format: - threadpool thread (%x) po wykonaniu wywołania zwrotnego (%p) ma zmienioną maskę koligacji wątku (%p -> %p)
- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Bieżąca koligacja.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: INCONSISTENT_AFFINITY_MASK
- Kod zatrzymania: 0x701
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieprzetworzone msg w puli msg bieżącego wątku.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli jakikolwiek komunikat pozostawiony jako nieprzetworzony po powrocie tego wątku wątku do puli. Jest to niebezpieczne, ponieważ zostanie przetworzone w zupełnie innym kontekście. Użyj polecenia !avrf -tp <Param4> , aby wyświetlić komunikaty opublikowane w tym wątku.
informacje wyświetlane przez weryfikatora aplikacji- Format: - threadpool thread (%x) po wykonaniu wywołania zwrotnego (%p) ma zaległy komunikat okna (%x: %x)
- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Threadpool thread id. Użyj !avrf -tp <threadid> , aby wyświetlić komunikaty opublikowane w tym wątku.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: ORPHANED_THREAD_MESSAGE
- Kod zatrzymania: 0x702
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Nieujawniane okno należało do bieżącego wątku.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli jakiekolwiek okno jest aktywne, gdy ten wątek wątku zostanie zwrócony do puli.
informacje wyświetlane przez weryfikatora aplikacji- Format: - threadpool thread (%x) po wykonaniu wywołania zwrotnego (%p) ma prawidłowy hwnd (%x: %s), który może odbierać komunikaty
- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Threadpool thread id.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: ORPHANED_THREAD_WINDOW
- Kod zatrzymania: 0x703
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
ExitThread() lub TerminateThread() w wątku puli wątków.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli element ExitThread jest wywoływany w wątku puli wątków. Jest zabronione, ponieważ sprawi, że system będzie niestabilny. Spowoduje to wyciek zasobów, zamrożenie lub av.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: ILLEGAL_THREAD_TERMINATION
- Kod zatrzymania: 0x704
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wątek jest w stanie personifikacji po powrocie do wątku puli wątków.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli funkcja wywołania zwrotnego zmieni token wątku, aby personifikować innego użytkownika i nie pamiętać, aby go zresetować przed zwróceniem go z powrotem do puli wątków.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: THREAD_IN_IMPERSONATION
- Kod zatrzymania: 0x705
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wywoływana jest funkcja, która wymaga trwałego wątku.
prawdopodobną przyczynąNiektóre interfejsy API systemu Microsoft Windows muszą być wywoływane wewnątrz dedykowanego lub trwałego wątku. W puli wątków należy zwykle unikać używania magazynu lokalnego wątku i kolejkowania wywołań asynchronicznych, które wymagają trwałego wątku, takiego jak funkcja RegNotifyChangeKeyValue. Jednak takie funkcje można kolejkować do trwałego wątku roboczego przy użyciu elementu QueueUserWorkItem z opcją WT_EXECUTEINPERSISTENTTHREAD. W debugerze zostanie ujawniony obiekt wywołujący.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: PERSISTED_THREAD_NEEDED
- Kod zatrzymania: 0x706
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Wątek jest w stanie brudnej transakcji.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli funkcja wywołania zwrotu nie pamięta o zamknięciu lub zresetowaniu bieżącego dojścia transakcji.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Dojście transakcji.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: DIRTY_TRANSACTION_CONTEXT
- Kod zatrzymania: 0x707
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Ten stan puli wątków ma niezrównoważone wywołania CoInit i CoUnInit.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli funkcja wywołania zwrotnego wywołuje moduł CoInit i CoUnInit niezrównoważone.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Zrównoważone liczby wywołań.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: DIRTY_COM_STATE
- Kod zatrzymania: 0x708
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Parametry obiektu czasomierza są niespójne. Okres powinien wynosić 0, gdy WT_EXECUTEONLYONCE jest określony podczas tworzenia czasomierza
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli okres sygnalizowania czasomierza nie jest zerowy, gdy czasomierz jest ustawiony na sygnał tylko raz z flagą WT_EXECUTEONLYONCE
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Określony okres.
- Parametr 2 - Flagi określone.
- Parametr 3 - Nieużytne.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: INCONSISTENT_TIMER_PARAMS
- Kod zatrzymania: 0x709
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Blokada modułu ładującego została zatrzymana przez wątek puli wątków w ramach wywołania zwrotnego.
prawdopodobną przyczynąTen zatrzymanie jest generowane, jeśli blokada modułu ładującego jest przechowywana w wywołaniu zwrotnym i nie jest zwalniana po powrocie wątku do puli wątków.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: LOADER_LOCK_HELD
- Kod zatrzymania: 0x7A
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Preferowany język jest ustawiany przez wątek threadpool w wywołaniu zwrotnym.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli preferowany język jest ustawiony w wywołaniu zwrotnym i nie jest czyszczone po powrocie wątku do puli wątków.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: PREFERRED_LANGUAGES_SET
- Kod zatrzymania: 0x7B
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Priorytet tła jest ustawiany przez wątek puli wątków w ramach wywołania zwrotnego.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli priorytet tła jest ustawiony w wywołaniu zwrotnym i nie jest wyłączony, gdy wątek zostanie zwrócony do puli wątków.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Callback, funkcja.
- Parametr 2 - Context.
- Parametr 3 - Threadpool Object allocation stack trace , użyj dps, aby go zrzucić.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: BACKGROUND_PRIORITY_SET
- Kod zatrzymania: 0x7C
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
TerminateThread() w wątku puli wątków.
prawdopodobną przyczynąTen przystanek jest generowany, jeśli element TerminateThread jest wywoływany w wątku puli wątków. Jest zabronione, ponieważ sprawi, że system będzie niestabilny. Spowoduje to wyciek zasobów, zamrożenie lub av.
informacje wyświetlane przez weryfikatora aplikacji- Parametr 1 - Nieużytne.
- Parametr 2 - Nieużytne.
- Parametr 3 - Nieużytne.
- Parametr 4 - Nieużytne.
- Warstwa testowa: Pula wątków
- Identyfikator zatrzymania: ILLEGAL_THREAD_TERMINATION
- Kod zatrzymania: 0x7D
- ważność : błąd
- błąd jednorazowy :
- raport o błędach : przerwa
- Dziennika do pliku: tak
- Tworzenie śledzenia wstecznego: tak
Zobacz też
Application Verifier — kody zatrzymania i definicje
Application Verifier — omówienie
Application Verifier — funkcje
Application Verifier — testowanie aplikacji
Application Verifier — testy w Weryfikatora aplikacji
Application Verifier — debugowanie weryfikatora aplikacji zatrzymuje