Udostępnij przez


Weryfikator aplikacji — kody zatrzymania — podstawy

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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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ć.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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.

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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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)

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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).

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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).

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • Parametr 1 - Krytyczny adres sekcji.
  • Parametr 2 - Liczba rekursji.
  • Parametr 3 - Oczekiwano liczby rekursji.
  • Parametr 4 - Adres informacyjny debugowania sekcji krytycznej.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • Parametr 1 - Krytyczny adres sekcji.
  • Parametr 2 - Zablokuj liczbę.
  • Parametr 3 - Oczekiwana liczba blokad.
  • Parametr 4 - Właściciel wątku.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • Parametr 1 - Krytyczny adres sekcji.
  • Parametr 2 - Zablokuj liczbę.
  • Parametr 3 - Oczekiwana liczba blokad.
  • Parametr 4 - Adres informacyjny debugowania sekcji krytycznej.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • Parametr 1 - Krytyczny adres sekcji.
  • Parametr 2 - Adres informacyjny debugowania sekcji krytycznej.
  • Parametr 3 — Nie jest używany.
  • Parametr 4 — Nie jest używany.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

dodatkowe informacje
  • 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

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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

informacje wyświetlane przez weryfikatora aplikacji
  • 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

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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ć.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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ć.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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ć.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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ć.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

informacje wyświetlane przez weryfikatora aplikacji
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

informacje wyświetlane przez weryfikatora aplikacji
  • Parametr 1 - Indeks TLS
  • Parametr 2 - Nieużytne.
  • Parametr 3 - Nieużytne.
  • Parametr 4 - Nieużytne.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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ń.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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.

dodatkowe informacje
  • 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

Application Verifier — często zadawane pytania