Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Následující kódy stop jsou obsaženy v základní sadě testů.
Podrobnosti o zastavení výjimek
Pokus o spuštění kódu v paměti, která není spustitelná (první šance).
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se aplikace pokouší spustit kód z adresy, která není spustitelná nebo bezplatná. Ladění tohoto zastavení:
- u <parameter2> – zrušení sestavení kódu viník
- Parametr .exr3>< – zobrazení informací o výjimce
- Parametr .cxr4 <> – zobrazení informací o kontextu výjimky
- kb – zobrazí trasování zásobníku v době, kdy byla výjimka vyvolána.
- Parametr 1 - Adresa, ke které se přistupuje.
- Parametr 2 - Kód provádějící neplatný přístup.
- Parametr 3 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 4 - Kontextový záznam. K zobrazení použijte .cxr.
- Testovací vrstva: Výjimky
- ID zastavení: FIRST_CHANCE_ACCESS_VIOLATION_CODE
- Zastavte kód: 650
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zpracování podrobností o zastavení
Neplatná výjimka popisovače pro aktuální trasování zásobníku
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce v horní části zásobníku předala neplatný popisovač rutinám systému. Obvykle jednoduchý příkaz "kb" odhalí, jaká je hodnota předaného popisovače (musí to být jeden z parametrů – obvykle první). Pokud je hodnota null, je to jasně špatně. Pokud hodnota vypadá v pořádku, musíte k získání historie operací souvisejících s touto hodnotou popisovače použít rozšíření ladicího programu !htrace. Ve většině případů se po zavření použije hodnota popisovače.
Informace zobrazené ověřovatelem aplikací- Parametr 1 – Nepoužívá se.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Ovládá
- ID zastavení: INVALID_HANDLE
- Zastavte kód: 300
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neplatný index TLS použitý pro aktuální trasování zásobníku
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce v horní části zásobníku předala neplatnému indexu TLS rutinám systému TLS. Obvykle jednoduchý příkaz "kb" odhalí, co je špatně. Typická chyba spočívá v tom, že místo volání tlsAlloc předpokládá určitou hodnotu indexu TLS. K tomu může dojít za předpokladu, že vždy získáte hodnotu N, a proto není nutné volat TlsAlloc. Častěji je příčinou neinicializovaná proměnná.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Neplatný index TLS.
- Parametr 2 - Byl očekáváno nižší část indexu.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Ovládá
- ID zastavení: INVALID_TLS_VALUE
- Zastavte kód: 301
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neplatné parametry pro volání WaitForMultipleObjects.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud funkce v horní části zásobníku s názvem WaitForMultipleObjects má hodnotu NULL jako adresu pole popisovačů, na které se má čekat, nebo s nulou jako počet popisovačů. Jednoduchý příkaz "kb" zobrazí funkci, která toto rozhraní API volá nesprávně.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa objektu zpracovává vektor.
- Parametr 2 - Počet popisovačů.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Ovládá
- ID zastavení: INCORRECT_WAIT_CALL
- Zastavte kód: 302
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Popisovač NULL předaný jako parametr. Je nutné použít platný popisovač.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud funkce v horní části zásobníku předala rutinám systému popisovač NULL. Obvykle jednoduchý příkaz "kb" odhalí, jaká je hodnota předaného popisovače (musí to být jeden z parametrů, obvykle první).
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Using NULL handle
- Parametr 2 - Nepoužívané
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Ovládá
- ID zastavení: NULL_HANDLE
- Zastavte kód: 303
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Čeká na popisovač vlákna v knihovně DllMain.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud aktuální vlákno aktuálně spouští kód uvnitř funkce DllMain některé knihovny DLL načtené v aktuálním procesu a volá WaitForSingleObject nebo WaitForMultipleObjects čekání na popisovač vlákna ve stejném procesu. To s největší pravděpodobností vede k vzájemnému zablokování, protože popisovač vlákna nebude signalizovat, pokud se druhé vlákno ukončí. Když druhé vlákno volá ExitThread, pokusí se získat zámek zavaděče knihovny DLL a pak volat DllMain (DLL_THREAD_DETACH) pro všechny knihovny DLL v aktuálním procesu. Vzhledem k tomu, že zámek zavaděče vlastní první vlákno (ten, který čeká na popisovač vlákna), budou obě vlákna zablokovaná.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Závitový úchyt.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Ovládá
- ID zastavení: WAIT_IN_DLLMAIN
- Zastavte kód: 304
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nesprávný typ objektu pro popisovač
pravděpodobné příčinyToto zastavení se vygeneruje, pokud aktuální vlákno volá rozhraní API s popisovačem objektu s nesprávným typem objektu. Například volání SetEvent s semaphore handle as parametr generuje toto zastavení. Ladění tohoto zastavení:
- kb – zobrazení aktuálního trasování zásobníku Viníkem je pravděpodobně knihovna DLL, která volá do verifier.dll
- du <parameter2> - k zobrazení skutečného typu popisovače. Hodnota popisovače je parametr1. V předchozím příkladu se zobrazí "Semaphore".
- du <parameter3> – zobrazení typu objektu očekávaného rozhraním API. V předchozím příkladu je tento název "Event".
- !htrace <parametr1> – může být užitečné, protože zobrazuje trasování zásobníku pro poslední operace otevření a zavření v tomto popisovači.
- Parametr 1 - Handle value.
- Parametr 2 - Název typu objektu. Zobrazení pomocí du
- Parametr 3 - Očekávaný název typu objektu. Zobrazení pomocí du
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Ovládá
- ID zastavení: INCORRECT_OBJECT_TYPE
- Zastavte kód: 305
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Podrobnosti o zastavení haldy
Neznámá chyba.
pravděpodobné příčinyK této zprávě může dojít v případě, že chybu nelze klasifikovat jiným způsobem. Právě teď se nepoužívá.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Nepoužívané
- Parametr 2 - Nepoužívané
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: UNKNOWN_ERROR
- Zastavte kód: 0x1
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Výjimka porušení přístupu
pravděpodobné příčinyToto je nejběžnější zastavení ověřovatele aplikace. Obvykle je příčinou chyba přetečení vyrovnávací paměti. Ověřovatel haldy umístí na konec přidělení haldy stránku, která není přístupná, a přetečení vyrovnávací paměti způsobí výjimku tím, že se na tuto stránku dotkne. K ladění tohoto zastavení identifikujte přístupovou adresu, která způsobila výjimku, a pak použijte následující příkaz ladicího programu:
- !halda -p -a ACCESS_ADDRESS – tento příkaz poskytuje podrobnosti o povaze chyby a o tom, který blok haldy je přetečení. Poskytuje také trasování zásobníku pro přidělení bloku. Existují další příčiny tohoto zastavení, například přístup k bloku haldy po uvolnění. Stejný příkaz ladicího programu je pro tento případ užitečný.
- Parametr 1 - Neplatná adresa způsobující výjimku
- Parametr 2 - Code address executing the invalid access
- Parametr 3 - Exception record
- Parametr 4 - Kontextový záznam
- Testovací vrstva: Hromady
- ID zastavení: ACCESS_VIOLATION
- Zastavte kód: 0x2
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Přístup s více vlákny v haldě vytvořené s příznakem HEAP_NO_SERIALIZE
pravděpodobné příčinyHalda vytvořená s příznakem HEAP_NO_SERIALIZE nemá být přístupná současně ze dvou vláken. Pokud se taková situace zjistí, zobrazí se tato zpráva. Typický způsob, jakým se tato situace plíží do programu, je propojením s jednouvláknovou verzí modulu C-runtime. Visual C++ může například staticky propojit takovou knihovnu při použití správných příznaků. Vývojáři pak na tyto podrobnosti zapomenou a použijí více vláken. Chyba je velmi obtížná při ladění v reálném životě, protože se zobrazí jako záhadná poškození dat.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Halda, ve které k operaci dojde.
- Parametr 2 - ID vlákna pro aktuálního vlastníka kritické části haldy.
- Parametr 3 - ID vlákna aktuálního vlákna, které se pokouší zadat haldu.
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: UNSYNCHRONIZED_ACCESS
- Zastavte kód: 0x3
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Požadavek na extrémní velikost.
pravděpodobné příčinyTato zpráva se vygeneruje, pokud v operaci HeapAlloc nebo HeapReAlloc je velikost bloku vyšší než jakákoli rozumná hodnota. Obvykle se tato hodnota 0x80000000 na 32bitových platformách a výrazně větší na 64bitových platformách.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Halda, ve které k operaci dojde.
- Parametr 2 - Size requested
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: EXTREME_SIZE_REQUEST
- Zastavte kód: 0x4
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Úchyt haldy s nesprávným podpisem
pravděpodobné příčinyStruktury haldy jsou označené magickou hodnotou. Pokud popisovač haldy použitý ve volání rozhraní haldy nemá tento vzor, bude tato zarážka generována. K této chybě může dojít v případě, že došlo k poškození interní struktury haldy (náhodné poškození) nebo se jednoduše jako popisovač haldy používá chybná hodnota. Pokud chcete získat seznam platných hodnot popisovače haldy, použijte následující příkaz ladicího programu:
- !halda -p
Všimněte si, že pokud v operaci haldy jednoduše přepnete platný popisovač haldy s jinou platnou operací haldy, nebudete mít tuto stopu (popisovač bude po všem platný). Ověřovatel haldy však tuto situaci zjistí a hlásí ji SWITCHED_HEAP_HANDLE zastavit.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Úchyt haldy použitý při volání rozhraní haldy
- Parametr 2 - Nepoužívané
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: BAD_HEAP_HANDLE
- Zastavte kód: 0x5
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozený ukazatel haldy nebo použití nesprávné haldy
pravděpodobné příčinyK tomu obvykle dochází v případě, že se blok přidělí v jedné haldě a uvolní se v jiné. Pomocí příkazu ladicího programu !heap -p získáte seznam všech platných hodnot popisovače haldy. Nejběžnějším příkladem je přidělení msvcrt pomocí malloc spárované s dohodou jádra 32 pomocí heapFree.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Halda, kde byl blok původně přidělen.
- Testovací vrstva: Hromady
- ID zastavení: SWITCHED_HEAP_HANDLE
- Zastavte kód: 0x6
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Blok haldy už byl uvolněn.
pravděpodobné příčinyK této situaci dochází, pokud je blok uvolněn dvakrát. Uvolněné bloky jsou označeny speciálním způsobem a uchovávají se po dobu v zpožděné volné frontě. Pokud se program chyby pokusí znovu uvolnit blok, dojde k zachycení tohoto problému – za předpokladu, že blok nebyl vyřazen z zpožděné bezplatné fronty a jeho paměť se znovu použila pro další přidělení. Hloubka zpoždění volné fronty je v pořadí tisíců bloků, a proto existuje dobrá šance, že bude zachycena většina dvojitých volných.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Úchyt haldy pro haldu, která vlastní blok.
- Parametr 2 - Blok haldy se zase uvolní.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: DOUBLE_FREE
- Zastavte kód: 0x7
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozený blok haldy.
pravděpodobné příčinyJedná se o obecnou chybu vystavenou v případě, že poškození bloku haldy nelze umístit do konkrétnější kategorie.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Reserved
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK
- Zastavte kód: 0x8
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Pokus o zničení haldy procesu.
pravděpodobné příčinyJedná se o chybu při pokusu o zničení výchozí haldy procesu (ten vrácený rozhraním GetProcessHeap()).
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá s heapDestroy.
- Parametr 2 - Nepoužívané
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: DESTROY_PROCESS_HEAP
- Zastavte kód: 0x9
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neočekávaná výjimka vyvolaná v kódu haldy
pravděpodobné příčinyTato stopa se vygeneruje, pokud při provádění kódu správce haldy dojde k narušení přístupu v nelegitimní situaci. Existuje několik situací, kdy je to v pořádku, například při volání "HeapValidate()" nebo 'HeapSize()'. Informace o záznamu výjimky (třetí parametr) lze použít k vyhledání přesného kontextu výjimky. K tomu použijte následující příkazy ladicího programu:
- dd parametr2 L2
- .exr first_dword
- second_dword .cxr
K tomuto zastavení obvykle dochází v případě, že v interních strukturách haldy dochází k náhodnému poškození.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Halda zapojená do operace.
- Parametr 2 - Exception record.
- Parametr 3 - Kontextový záznam.
- Parametr 4 - Exception code (C0000005 – porušení přístupu)
- Testovací vrstva: Hromady
- ID zastavení: UNEXPECTED_EXCEPTION
- Zastavte kód: 0xA
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Při ověřování hlavičky bloku haldy došlo k výjimce.
pravděpodobné příčinyK této situaci dochází, pokud ve skutečnosti nemůžeme určit žádný konkrétní typ poškození bloku. Dojde například v případě, že adresa bloku haldy předaná do volné operace haldy odkazuje na nepřístupnou paměťovou oblast (poškozený ukazatel, neinicializovaný ukazatel atd.).
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Úchyt haldy pro haldu, která vlastní blok.
- Parametr 2 - Blok haldy, který je poškozen.
- Parametr 3 - Velikost bloku nebo nuly, pokud nelze určit velikost.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER
- Zastavte kód: 0xB
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Při ověřování bloku haldy došlo k výjimce.
pravděpodobné příčinyK této situaci dochází, pokud ve skutečnosti nemůžeme určit žádný konkrétní typ poškození bloku. Pokud například během volné operace haldy předáte adresu, která odkazuje na nepřístupnou oblast paměti. K tomu může dojít také v případě, že nenajdeme blok mezi bloky haldy celé stránky a testujeme ho jako blok haldy světlé stránky.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Vyhrazeno.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING
- Zastavte kód: 0xC
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Blok haldy je po uvolnění poškozen.
pravděpodobné příčinyK této situaci dochází v případě, že se po uvolnění zapíše blok paměti.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Úchyt haldy pro haldu, která vlastní blok.
- Parametr 2 - Blok haldy, který je poškozen.
- Parametr 3 - Velikost bloku nebo nuly, pokud nelze určit velikost.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_HEADER
- Zastavte kód: 0xD
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozený vzor infixu pro volný blok haldy.
pravděpodobné příčinyUvolněné bloky jsou někdy označeny jako nedostupné a program, na který se jich dotkne, dojde k porušení přístupu (jiné ověření se zastaví). V jinýchpřípadechch Nakonec ve FIFO módě bloky se opravdu uvolní. V tuto chvíli se zkontroluje vzor infixu a pokud byl změněn, dostanete tuto přestávku. Zásobník v okamžiku přestávky není relevantní. Potřebujete zjistit povahu bloku a kódu zkontrolovat kód, který může být nesprávný.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Úchyt haldy pro haldu, která vlastní blok.
- Parametr 2 - Blok haldy se uvolní.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Vyhrazeno.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_FREED_HEAP_BLOCK
- Zastavte kód: 0xE
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Vzor poškozené přípony pro blok haldy
pravděpodobné příčinyNejčastěji k tomu dochází u chyb přetečení vyrovnávací paměti. Někdy ověřovatel aplikace umístí nepřístupné stránky na konec přidělení a přetečení vyrovnávací paměti způsobí narušení přístupu a někdy blok haldy následuje magický vzor. Pokud se tento vzor změní, když se blok uvolní, dostanete tuto přestávku. Tyto přestávky můžou být poměrně obtížné ladit, protože nemáte skutečný okamžik, kdy došlo k poškození. Máte přístup k volnému okamžiku (tj. "sem došlo k zastavení") a trasování zásobníku přidělení (!halda -p -a HEAP_ADDRESS)
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Vyhrazeno.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_SUFFIX
- Zastavte kód: 0xF
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozený počáteční razítko pro blok haldy
pravděpodobné příčinyK tomu dochází u podtečení vyrovnávací paměti.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Poškozená hodnota kolku.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_START_STAMP
- Zastavte kód: 0x10
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozené koncové razítko bloku haldy
pravděpodobné příčinyK tomu dochází u podtečení vyrovnávací paměti.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Poškozená hodnota kolku.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_END_STAMP
- Zastavte kód: 0x11
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozený vzor předpony pro blok haldy
pravděpodobné příčinyK tomu dochází u podtečení vyrovnávací paměti.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Rukojeť haldy použitá ve volání.
- Parametr 2 - Blok haldy zapojené do operace.
- Parametr 3 - Velikost bloku haldy.
- Parametr 4 - Vyhrazeno.
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_BLOCK_PREFIX
- Zastavte kód: 0x12
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
První náhoda narušení přístupu pro aktuální trasování zásobníku.
pravděpodobné příčinyToto je nejběžnější zastavení ověřovatele aplikace. Obvykle je příčinou chyba přetečení vyrovnávací paměti. Ověřovatel haldy umístí na konec přidělení haldy stránku, která není přístupná, a přetečení vyrovnávací paměti způsobí výjimku tím, že se na tuto stránku dotkne. K ladění tohoto zastavení identifikujte přístupovou adresu, která způsobila výjimku, a pak použijte následující příkaz ladicího programu:
- !halda -p -a ACCESS_ADDRESS
Tento příkaz poskytne podrobnosti o povaze chyby a o tom, jaký blok haldy se přetečí. Poskytne také trasování zásobníku pro přidělení bloku. Toto zastavení má několik dalších příčin, například přístup k bloku haldy po uvolnění. Stejný příkaz ladicího programu bude v tomto případě užitečný.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Neplatná adresa způsobující výjimku.
- Parametr 2 - Code address executing the invalid access.
- Parametr 3 - Exception record.
- Parametr 4 - Kontextový záznam.
- Testovací vrstva: Hromady
- ID zastavení: FIRST_CHANCE_ACCESS_VIOLATION
- Zastavte kód: 0x13
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Počet seznamů hald procesu je neplatný.
pravděpodobné příčinyK této zprávě může dojít, pokud při volání GetProcessHeaps správce haldy stránky zjistí některé interní nekonzistence. Příčinou může být náhodné poškození v prostoru procesu.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Skutečný počet hald.
- Parametr 2 - Počet hald stránek.
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Hromady
- ID zastavení: CORRUPTED_HEAP_LIST
- Zastavte kód: 0x14
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Podrobnosti o zastavení úniku
Došlo k úniku haldy.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud byla knihovna DLL vlastníka přidělení dynamicky uvolněna při vlastnictví prostředků.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa nevraceného přidělení. Spusťte !haldu -p -a <adresu> a získejte další informace o přidělení.
- Parametr 2 - Adresujte trasování zásobníku přidělení. Spuštěním adresy< dps >zobrazte zásobník přidělení.
- Parametr 3 - Adresa názvu knihovny DLL vlastníka. Spuštěním du <adresy> načtěte název knihovny DLL.
- Parametr 4 - Základ knihovny DLL vlastníka. Spusťte .reload <dll_name> = <adresu> pro opětovné načtení knihovny DLL vlastníka. Další informace o načtených a uvolněných modulech získáte pomocí lm.
- Testovací vrstva: Únik
- ID zastavení: PŘÍDĚL
- Zastavte kód: 0x900
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Došlo k úniku rukojeti.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud byla knihovna DLL vlastníka popisovače dynamicky uvolněna při vlastnictví prostředků. Ladění tohoto zastavení: Spuštěním parametru !htrace1 získáte další informace o popisovači.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Hodnota unikajícího úchytu. Spuštěním popisovače< !htrace >získejte další informace o popisovači, pokud je povolené trasování popisovače.
- Parametr 2 - Adresujte trasování zásobníku přidělení. Spuštěním adresy< dps >zobrazte zásobník přidělení.
- Parametr 3 - Adresa názvu knihovny DLL vlastníka. Spuštěním du <adresy> načtěte název knihovny DLL.
- Parametr 4 - Základ knihovny DLL vlastníka. Spusťte .reload <dll_name> = <adresu> pro opětovné načtení knihovny DLL vlastníka. Další informace o načtených a uvolněných modulech získáte pomocí lm.
- Testovací vrstva: Únik
- ID zastavení: KLIKA
- Zastavte kód: 0x901
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Došlo k úniku klíče HKEY.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud byla knihovna DLL vlastníka klíče registru dynamicky uvolněna při vlastnictví prostředků.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Hodnota nevráceného klíče HKEY.
- Parametr 2 - Adresujte trasování zásobníku přidělení. Spuštěním adresy< dps >zobrazte zásobník přidělení.
- Parametr 3 - Adresa názvu knihovny DLL vlastníka. Spuštěním du <adresy> načtěte název knihovny DLL.
- Parametr 4 - Základ knihovny DLL vlastníka. Spusťte .reload <dll_name> = <adresu> pro opětovné načtení knihovny DLL vlastníka. Další informace o načtených a uvolněných modulech získáte pomocí lm.
- Testovací vrstva: Únik
- ID zastavení: REGISTR
- Zastavte kód: 0x902
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Došlo k úniku virtuální rezervace.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud byla knihovna DLL vlastníka virtuální rezervace dynamicky uvolněna při vlastnictví prostředků.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Nevracená adresa rezervace.
- Parametr 2 - Adresujte trasování zásobníku přidělení. Spuštěním adresy< dps >zobrazte zásobník přidělení.
- Parametr 3 - Adresa názvu knihovny DLL vlastníka. Spuštěním du <adresy> načtěte název knihovny DLL.
- Parametr 4 - Základ knihovny DLL vlastníka. Spusťte .reload <dll_name> = <adresu> pro opětovné načtení knihovny DLL vlastníka. Další informace o načtených a uvolněných modulech získáte pomocí lm.
- Testovací vrstva: Únik
- ID zastavení: VIRTUAL_RESERVATION
- Zastavte kód: 0x903
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Došlo k úniku BSTR.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud byla knihovna DLL vlastníka sysString dynamicky uvolněna při vlastnictví prostředků.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa uniklého BSTR. Spusťte !haldu -p -a <adresu> a získejte další informace o přidělení.
- Parametr 2 - Adresujte trasování zásobníku přidělení. Spuštěním adresy< dps >zobrazte zásobník přidělení.
- Parametr 3 - Adresa názvu knihovny DLL vlastníka. Spuštěním du <adresy> načtěte název knihovny DLL.
- Parametr 4 - Základ knihovny DLL vlastníka. Spusťte .reload <dll_name> = <adresu> pro opětovné načtení knihovny DLL vlastníka. Další informace o načtených a uvolněných modulech získáte pomocí lm.
- Testovací vrstva: Únik
- ID zastavení: SYSSTRING
- Zastavte kód: 0x904
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Oznámení o napájení nebylo odregistrováno.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud knihovna DLL zaregistrovaná pro oznámení o napájení byla dynamicky uvolněna bez zrušení registrace.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa registrace oznámení o napájení.
- Parametr 2 - Adresa trasování zásobníku registrace. Spuštěním adresy< dps >zobrazte zásobník přidělení.
- Parametr 3 - Adresa názvu knihovny DLL vlastníka. Spuštěním du <adresy> načtěte název knihovny DLL.
- Parametr 4 - Základ knihovny DLL vlastníka. Spusťte .reload <dll_name> = <adresu> pro opětovné načtení knihovny DLL vlastníka. Další informace o načtených a uvolněných modulech získáte pomocí lm.
- Testovací vrstva: Únik
- ID zastavení: POWER_NOTIFICATION
- Zastavte kód: 0x905
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uzamčení podrobností o zastavení
Vlákno nemůže vlastnit kritický oddíl.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud je vlákno (ID vlákna parametr1) ukončeno, pozastaveno nebo je ve stavu (pracovní vlákno dokončilo pracovní položku), ve kterém nemůže obsahovat kritický oddíl. Aktuální vlákno je viníkem. K ladění tohoto zastavení použijte následující příkazy ladicího programu:
- kb – získání aktuálního trasování zásobníku Pokud je aktuální vlákno vlastníkem kritické části, pravděpodobně volá ExitThread. Aktuální vlákno by mělo před ukončením uvolnit kritickou část. Pokud aktuální vlákno volá TerminateThread nebo SuspendThread, nemělo by to udělat pro vlákno, které obsahuje kritický oddíl.
- !cs -s <parametr2> – informace o výpisu paměti o této kritické části.
- ln <parametr2> – zobrazení symbolů v blízkosti adresy kritické části. To by mělo pomoct identifikovat nevracenou kritickou část.
- dps <parameter4> – k výpisu trasování zásobníku pro inicializaci tohoto kritického oddílu.
- Parametr 1 - THREAD ID.
- Parametr 2 - Kritická adresa oddílu.
- Parametr 3 - Kritická adresa informací o ladění oddílu.
- Parametr 4 - Kritické trasování zásobníku inicializace oddílu.
- Testovací vrstva: Zámky
- ID zastavení: EXIT_THREAD_OWNS_LOCK
- Zastavte kód: 0x200
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolňování knihovny DLL obsahující aktivní kritickou část
pravděpodobné příčinyToto zastavení se vygeneruje, pokud knihovna DLL obsahuje globální proměnnou obsahující kritickou část a knihovna DLL je uvolněna, ale kritická část nebyla odstraněna. K ladění tohoto zastavení použijte následující příkazy ladicího programu:
- du <parameter3> - k výpisu názvu knihovny DLL vyčíslit.
- .reload dllname nebo .reload dllname = <parameter4> - to reload the symbols for that DLL.
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct identifikovat nevracenou kritickou část.
- dps <parameter2> – pro výpis trasování zásobníku pro tuto inicializaci kritického oddílu.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritické trasování zásobníku inicializace oddílu.
- Parametr 3 - DLL name address.
- Parametr 4 - DLL základní adresa.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_IN_UNLOADED_DLL
- Zastavte kód: 0x201
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění bloku haldy obsahující aktivní kritický oddíl
pravděpodobné příčinyToto zastavení se vygeneruje, pokud přidělení haldy obsahuje kritický oddíl, přidělení se uvolní a kritický oddíl se neodstraní. K ladění tohoto zastavení použijte následující příkazy ladicího programu:
- !cs -s <(parametr1)> – informace o výpisu paměti o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct identifikovat nevracenou kritickou část.
- dps <parameter2> – pro výpis trasování zásobníku pro tuto inicializaci kritického oddílu.
- < parametr3> a <parametr4> vám můžou pomoct pochopit, kde byl přidělen tento blok haldy (velikost přidělení je pravděpodobně významná).
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritické trasování zásobníku inicializace oddílu.
- Parametr 3 - Adresa bloku haldy.
- Parametr 4 - Velikost bloku haldy.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_IN_FREED_HEAP
- Zastavte kód: 0x202
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Dvojitě inicializovaný nebo poškozený kritický oddíl
pravděpodobné příčinyTato stopa se obvykle vygeneruje v případě, že se kritická část inicializovala vícekrát. V tomto případě jsou parametr3 a parametr4 adresy trasování zásobníku pro dvě z těchto inicializací. Někdy jindy je možné tuto stopu získat, pokud je poškozena kritická část nebo její struktura informací ladění. V tomto druhém případě je možné, že parametr3 a parametr4 jsou neplatné a zbytečné. Ladění tohoto zastavení:
- !cs -s -d <parametr2> – informace o výpisu paměti o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To může pomoct identifikovat kritickou část, pokud se jedná o globální proměnnou.
- dps <parameter3> a dps <parameter4> – k identifikaci dvou cest kódu pro inicializaci této kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Address of the debug information structure found in the active list.
- Parametr 3 - První inicializační trasování zásobníku
- Parametr 4 - Druhé trasování inicializačního zásobníku.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_DOUBLE_INITIALIZE
- Zastavte kód: 0x203
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Volné paměti obsahující aktivní kritickou část.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud byla uvolněna paměť obsahující kritický oddíl, ale kritická část nebyla odstraněna pomocí deleteCriticalSection. K ladění tohoto zastavení použijte následující příkazy ladicího programu:</p.>
- !cs -s -d <parametr2> – informace o výpisu paměti o této kritické části.
- dps <parameter3> – k identifikaci cesty kódu pro inicializaci této kritické části.
Ve většině případů ověřovatel zámku zjistí okamžitě nevracené kritické části obsažené v přidělení haldy, rozsahu dll, přidělení virtuální paměti nebo mapViewOfFile mapované oblasti paměti a v těchto případech dochází k různým zastavením. Takže pro tuto ověřitelní zastavení zbývá velmi málo případů. Zámek musí být v rozsahu paměti uvolněným kódem v režimu jádra nebo uvolněným křížovým procesem rozhraními API, jako je VirtualFreeEx. Nejčastěji se k tomuto zastavení dochází, pokud předchozí zastavení (např. LOCK_IN_FREED_HEAP nebo LOCK_IN_UNLOADED_DLL) pokračovalo stisknutím klávesy g v konzole ladicího programu.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritická adresa informací o ladění oddílu.
- Parametr 3 - Kritické trasování zásobníku inicializace oddílu.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_IN_FREED_MEMORY
- Zastavte kód: 0x204
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozená kritická část.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud pole DebugInfo kritického oddílu ukazuje na uvolněnou paměť. V seznamu aktivních důležitých oddílů se obvykle nachází jiná platná struktura DebugInfo. Bez poškození by měly být dva ukazatele identické. K ladění tohoto zastavení použijte následující příkazy ladicího programu:
- !cs -s -d <parametr3> – výpis informací o tomto kritickém oddílu na základě aktuálního obsahu struktury informací ladění nalezené v aktivním seznamu (tato struktura je zřídka poškozená, takže obvykle jsou tyto informace důvěryhodné).
- !cs -s <parametr1> – výpis informací o tomto kritickém oddílu na základě aktuálního obsahu struktury kritického oddílu (struktura je již poškozena, takže někdy tyto informace nejsou důvěryhodné).
- dps <parameter4> – k identifikaci cesty kódu pro inicializaci této kritické části.
Vysuněte kritickou část na parametru adresy <1> a vyhledejte vzor poškození. S dobrými symboly pro ntdll.dl můžete použít následující příkazy:
- dt ntdll!_RTL_CRITICAL_SECTION LOCK_ADDRESS
- dt ntdll!_RTL_CRITICAL_SECTION_DEBUG DEBUG_ADDRESS
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Neplatná adresa informací o ladění této kritické části.
- Parametr 3 - Adresa informací o ladění nalezených v aktivním seznamu.
- Parametr 4 - Inicializace trasování zásobníku
- Testovací vrstva: Zámky
- ID zastavení: LOCK_CORRUPTED
- Zastavte kód: 0x205
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neplatné vlákno vlastníka kritického oddílu
pravděpodobné příčinyToto zastavení se vygeneruje, pokud je ID vlákna vlastníka v aktuálním kontextu neplatné. Ladění tohoto zastavení:
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct s identifikací kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Vlastní vlákno.
- Parametr 3 - Byl očekáván vlastnící vlákno.
- Parametr 4 - Kritická adresa informací o ladění oddílu.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_INVALID_OWNER
- Zastavte kód: 0x206
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neplatný počet rekurzí kritického oddílu
pravděpodobné příčinyTato zarážka se vygeneruje, pokud v aktuálním kontextu není platné pole počtu rekurzí struktury kritického oddílu. Ladění tohoto zastavení:
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct s identifikací kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Rekurzní počet.
- Parametr 3 - Očekávaný počet rekurzí.
- Parametr 4 - Kritická adresa informací o ladění oddílu.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_INVALID_RECURSION_COUNT
- Zastavte kód: 0x207
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Odstranění kritického oddílu s neplatným počtem zámků
pravděpodobné příčinyToto zastavení se vygeneruje, pokud je kritický oddíl vlastněn vláknem, pokud je odstraněn nebo pokud je kritický oddíl neinicializován. Ladění tohoto zastavení:
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části. Pokud je vlastnící vlákno 0, nebyl inicializován kritický oddíl.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct s identifikací kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 -Zamknout počet.
- Parametr 3 - Očekávaný počet zámků.
- Parametr 4 - Vlastní vlákno.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_INVALID_LOCK_COUNT
- Zastavte kód: 0x208
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Kritická část je převolněna nebo poškozena.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud je kritická část vydána vícekrát, než ho získalo aktuální vlákno. Ladění tohoto zastavení:
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části.
- !cs -s -d <parametr4> – informace o výpisu paměti o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct s identifikací kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 -Zamknout počet.
- Parametr 3 - Očekávaný počet zámků.
- Parametr 4 - Kritická adresa informací o ladění oddílu.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_OVER_RELEASED
- Zastavte kód: 0x209
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Kritický oddíl není inicializován.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se kritický oddíl použije bez inicializace nebo po jeho odstranění. Ladění tohoto zastavení:
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To by mělo pomoct s identifikací kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritická adresa informací o ladění oddílu.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_NOT_INITIALIZED
- Zastavte kód: 0x210
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Kritická část je již inicializována.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud je aktuální vlákno znovu inicializováno kritickým oddílem. Ladění tohoto zastavení:
- !cs -s <parametr1> nebo !cs -s -d <parametr2> – výpis informací o této kritické části.
- ln <parametr1> – zobrazení symbolů v blízkosti adresy kritického oddílu. To může pomoct identifikovat kritickou část, pokud se jedná o globální proměnnou.
- dps <parameter3> – k identifikaci cesty kódu pro první inicializaci této kritické části.
- kb – pro zobrazení aktuálního trasování zásobníku, který znovu inicializuje tuto kritickou část.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritická adresa informací o ladění oddílu.
- Parametr 3 - První inicializační trasování zásobníku Použití dps k výpisu paměti, pokud není null
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_ALREADY_INITIALIZED
- Zastavte kód: 0x211
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění virtuální paměti obsahující aktivní kritickou část.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud aktuální vlákno volá VirtualFree na bloku paměti, který obsahuje aktivní kritický oddíl. Aplikace by měla volat DeleteCriticalSection v této kritické části předtím, pokud uvolní tuto paměť.
- kb - k zobrazení aktuální trasování zásobníku, který volá VirtualFree. Pravděpodobnou vinou je knihovna DLL, která volá VirtualFree.
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části.
- dps <parameter2> – k identifikaci cesty kódu pro inicializaci této kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritické trasování zásobníku inicializace oddílu.
- Parametr 3 - Adresa bloku paměti.
- Parametr 4 - Velikost bloku paměti.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_IN_FREED_VMEM
- Zastavte kód: 0x212
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zrušte mapování oblasti paměti obsahující aktivní kritickou část.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud aktuální vlákno volá UnmapViewOfFile v bloku paměti, který obsahuje aktivní kritický oddíl. Aplikace by měla volat DeleteCriticalSection v této kritické části předtím, pokud nemapuje tuto paměť.
- kb - k zobrazení aktuální trasování zásobníku, který volá UnmapViewOfFile . Pravděpodobnou vinou je knihovna DLL, která volá UnmapViewOfFile.
- !cs -s <parametr1> – informace o výpisu paměti o této kritické části.
- dps <parameter2> – k identifikaci cesty kódu pro inicializaci této kritické části.
- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Kritické trasování zásobníku inicializace oddílu.
- Parametr 3 - Adresa bloku paměti.
- Parametr 4 - Velikost bloku paměti.
- Testovací vrstva: Zámky
- ID zastavení: LOCK_IN_UNMAPPED_MEM
- Zastavte kód: 0x213
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Aktuální vlákno nevlastní žádné kritické oddíly.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud aktuální vlákno volá LeaveCriticalSection, ale v souladu s interním ověřovatelem účetnictví nevlastní žádnou kritickou část. Pokud je \<parameter2\> nula, pravděpodobně se jedná o chybu v aktuálním vlákně. Buď se pokusí opustit kritickou část, kterou nezadal, nebo možná volá LeaveCriticalSection vícekrát, než se nazývá EnterCriticalSection pro stejnou kritickou část. Pokud \<parameter2\> není nula (jedná se o záporné celé číslo), jsou interní datové struktury ověřovatele pravděpodobně poškozeny.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 - Počet kritických oddílů vlastněných aktuálním vláknem.
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Zámky
- ID zastavení: THREAD_NOT_LOCK_OWNER
- Zastavte kód: 0x214
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Použití kritického oddílu, který je soukromý pro jinou knihovnu DLL.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud se aktuální vlákno pokusí použít privátní zámek, který se nachází v jiné knihovně DLL. Například a.dll se pokusí zadat kritický oddíl definovaný uvnitř ntdll.dll. Privátní zámky nelze použít napříč knihovnami DLL.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Kritická adresa oddílu.
- Parametr 2 – Nepoužívá se.
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Zámky
- ID zastavení: LOCK_PRIVATE
- Zastavte kód: 0x215
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Podrobnosti o zastavení SRWLock
Zámek SRW není inicializován.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se vlákno pokouší použít zámek SRW (Param1), který není inicializován. K ladění tohoto zastavení použijte k získání aktuálního trasování zásobníku "kb". Tady se používá zámek SRW. Zámek SRW by se měl inicializovat pomocí InicializaceSRWLock, než se dá použít.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - SRW Lock
- Parametr 2 - Nepoužívané
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: SRWLock
- ID zastavení: NOT_INITIALIZED
- Zastavte kód: 0x250
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zámek SRW je již inicializován.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se znovu inicializuje zámek SRW (Param1). Pokud se zámek SRW aktivně používá jinými vlákny, opětovné inicializace zámku způsobí nepředvídatelné chování aplikace, včetně zablokování a chybových ukončení. Trasování inicializačního zásobníku může zobrazit získání, pokud byl zámek SRW staticky inicializován. Ladění tohoto zastavení:
- kb – získání aktuálního trasování zásobníku Tady se znovu inicializuje zámek SRW.
- dps <parametr3> – získání trasování zásobníku inicializace zámku SRW Toto trasování zásobníku může zobrazit získání, pokud byl zámek staticky inicializován.
- Parametr 1 - SRW Lock
- Parametr 2 - ThreadId vlákna, které inicializovalo zámek SRW.
- Parametr 3 - Adresa trasování inicializačního zásobníku. Pomocí adresy< dps >zjistíte, kde byl inicializován zámek SRW.
- Parametr 4 - Nepoužívané
- Testovací vrstva: SRWLock
- ID zastavení: ALREADY_INITIALIZED
- Zastavte kód: 0x251
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neshoda Acquire-Release na zámku SRW.
pravděpodobné příčinyTato stopa se vygeneruje, pokud se uvolní zámek SRW (Param1) s nesprávným rozhraním API verze. Pokud se zámek SRW získal pro sdílený přístup a vydává se pomocí výhradního rozhraní API verze nebo se zámek SRW získal pro výhradní přístup a vydává se pomocí sdíleného rozhraní API verze. To může mít za následek nepředvídatelné chování aplikace, včetně zablokování a chybových ukončení. Ladění tohoto zastavení:
- kb – získání aktuálního trasování zásobníku Tady se vydává zámek SRW pomocí nesprávného rozhraní API.
- dps <parameter3> – získání trasování zásobníku zámkem SRW
- Parametr 1 - SRW Lock
- Parametr 2 - ThreadId vlákna, které získalo zámek SRW.
- Parametr 3 - Adresa trasování získání zásobníku. Pomocí adresy< dps >zjistíte, kde byl zámek SRW získán.
- Parametr 4 - Nepoužívané
- Testovací vrstva: SRWLock
- ID zastavení: MISMATCHED_ACQUIRE_RELEASE
- Zastavte kód: 0x252
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zámek SRW se získává rekurzivně stejným vláknem.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se zámek SRW (Param1) získává rekurzivně stejným vláknem. Výsledkem bude zablokování a vlákno by blokovalo neomezeně dlouho. Rekurzivní získání zámku SRW ve výhradním režimu způsobí zablokování. Rekurzivní získání zámku SRW ve sdíleném režimu způsobí zablokování v případě, že vlákno čeká na výhradní přístup. Podívejte se na následující příklad: – Vlákno A získá zámek SRW ve sdíleném režimu – Vlákno B se pokusí získat zámek SRW ve výhradním režimu a čeká – Vlákno A se pokusí získat zámek SRW ve sdíleném režimu rekurzivně. To bude úspěšné, pokud neexistuje žádný výhradní číšník (v tomto případě B). Vzhledem k tomu, že zámky SRW nemají zapisovač hladovění, vlákno A čeká za vláknem B. Teď vlákno B čeká na vlákno A, které zase čeká na vlákno B, což způsobuje cyklický čekání, a proto zablokování. Ladění tohoto zastavení:
- kb – získání aktuálního trasování zásobníku Tady se zámek SRW získává rekurzivně.
- dps <parameter2> – získání trasování zásobníku pro první získání.
- Parametr 1 - SRW Lock
- Parametr 2 - Adresa prvního získání trasování zásobníku. Pomocí adresy< dps >zjistíte, kde byl zámek SRW získán.
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: SRWLock
- ID zastavení: RECURSIVE_ACQUIRE
- Zastavte kód: 0x253
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Vlákno, které se ukončuje nebo je ukončeno, vlastní zámek SRW.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud vlákno (Param2), které vlastní zámek SRW (Param1), se ukončí nebo ukončí. Výsledkem bude osamocený zámek SRW a vlákna, která se snaží tento zámek získat, by blokovala neomezeně dlouho. Ladění jeho zastavení:
- kb – získání aktuálního trasování zásobníku Tady se vlákno ukončuje nebo ukončuje.
- dps <parameter3> – získání trasování zásobníku zámkem SRW
- Parametr 1 - SRW Lock
- Parametr 2 - ThreadId vlákna, které se ukončuje nebo ukončuje.
- Parametr 3 - Adresa trasování získání zásobníku. Pomocí adresy< dps >zjistíte, kde byl zámek SRW získán.
- Parametr 4 - Nepoužívané
- Testovací vrstva: SRWLock
- ID zastavení: EXIT_THREAD_OWNS_LOCK
- Zastavte kód: 0x254
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Tento vlákno nezískalo uvolnění zámku SRW.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud se zámek SRW (Param1) uvolní vlákno (Param2), které zámek nezískalo. To představuje chybný programovací postup, který je obtížné správně získat a může vést k nepředvídatelným chování aplikace. Ladění tohoto zastavení:
- kb – získání aktuálního trasování zásobníku Tady vlákno vydává zámek SRW, který nezískal.
- dps <parameter4> – získání trasování zásobníku zámkem SRW
- Parametr 1 - SRW Lock
- Parametr 2 - Current ThreadId.
- Parametr 3 - ThreadId vlákna, které získalo zámek SRW.
- Parametr 4 - Adresa trasování získání zásobníku. Pomocí adresy< dps >zjistíte, kde byl zámek SRW získán.
- Testovací vrstva: SRWLock
- ID zastavení: INVALID_OWNER
- Zastavte kód: 0x255
- závažnost : upozornění
- jednorázová chyba:
- Zpráva o chybě : Žádná
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění paměti obsahuje aktivní zámek SRW.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud uvolněná adresa paměti (Param1) obsahuje aktivní zámek SRW, který se stále používá. To může mít za následek nepředvídatelné chování aplikace, včetně chybových ukončení a zablokování. Ladění tohoto zastavení:
- kb – získání aktuálního trasování zásobníku V tomto případě se uvolní paměť, která obsahuje aktivní zámek SRW.
- dps <parameter4> – získání trasování zásobníku zámkem SRW
- Parametr 1 - SRW Lock
- Parametr 2 - Adresa uvolněné paměti.
- Parametr 3 - ThreadId vlákna, které získalo zámek SRW.
- Parametr 4 - Adresa trasování získání zásobníku. Pomocí adresy< dps >zjistíte, kde byl zámek SRW získán.
- Testovací vrstva: SRWLock
- ID zastavení: IN_FREED_MEMORY
- Zastavte kód: 0x256
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Knihovna DLL, která je uvolněna, obsahuje aktivní zámek SRW.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud knihovna DLL uvolněná (Param2) obsahuje aktivní zámek SRW (Param1), který se stále používá. To může mít za následek nepředvídatelné chování aplikace, včetně chybových ukončení a zablokování. Ladění tohoto zastavení:
- kb – získání aktuálního trasování zásobníku V tomto případě je knihovna DLL uvolněna, která obsahuje aktivní zámek SRW.
- du <parameter2> - k nalezení názvu knihovny DLL, která je uvolněna.
- dps <parameter4> – získání trasování zásobníku zámkem SRW
- Parametr 1 - SRW Lock
- Parametr 2 - Address of the name of the DLL being unloaded. Jméno zobrazíte pomocí du <adresy> .
- Parametr 3 - ThreadId vlákna, které získalo zámek SRW.
- Parametr 4 - Adresa trasování získání zásobníku. Pomocí adresy< dps >zjistíte, kde byl zámek SRW získán.
- Testovací vrstva: SRWLock
- ID zastavení: IN_UNLOADED_DLL
- Zastavte kód: 0x257
- závažnost : upozornění
- jednorázová chyba:
- Zpráva o chybě : Žádná
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Podrobnosti o zastavení paměti
Uvolnění bloku virtuální paměti s neplatnou velikostí nebo počáteční adresou
pravděpodobné příčinyTato zarážka se vygeneruje, pokud ověřovatel aplikace zjistí virtualFree nebo knihovnu DLL uvolnění s neplatnou počáteční adresou nebo velikostí přidělení paměti. V případě uvolnění knihovny DLL to pravděpodobně znamená poškození paměti v seznamu načtených knihoven DLL. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku a adresu a velikost paměti, která se chystá uvolnit, a zkuste zjistit, proč jsou neplatné.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Alokační základní adresa.
- Parametr 2 - Velikost oblasti paměti.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_FREEMEM
- Zastavte kód: 0x600
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nesprávné virtuální volání alokací
pravděpodobné příčinyToto zastavení se vygeneruje, pokud ověřovatel aplikace zjistí volání VirtualAlloc s neplatnou počáteční adresou nebo velikostí přidělení paměti. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a adresu a velikost paměti, která se chystáte přidělit, a zkuste zjistit, proč jsou neplatné.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Ukazatel na základní adresu přidělení.
- Parametr 2 - Ukazatel na velikost oblasti paměti.
- Parametr 3 - Nepoužívané
- Parametr 4 - Nepoužívané
- Testovací vrstva: Paměť
- ID zastavení: INVALID_ALLOCMEM
- Zastavte kód: 0x601
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nesprávné volání zobrazení mapy
pravděpodobné příčinyToto zastavení se vygeneruje, pokud ověřovatel aplikace zjistí volání MapViewOfFile s neplatnou základní adresou nebo velikostí mapování. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a adresu a velikost paměti, která se chystá namapovat, a zkuste zjistit, proč jsou neplatné.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Ukazatel na mapování základní adresy.
- Parametr 2 - Ukazatel na velikost zobrazení.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_MAPVIEW
- Zastavte kód: 0x602
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zbídání neplatné adresy
pravděpodobné příčinyTato zarážka se vygeneruje, pokud ověřovatel aplikace zjistí volání IsBadXXXPtr s neplatnou adresou (například adresou v režimu jádra místo normální adresy v uživatelském režimu), aby se paměťová vyrovnávací paměť vysílala. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč volající funkce IsBadXXXPtr skončil s neplatnou adresou. Často je adresa neinicializovaný, například neinicializovaný ukazatel. Knihovna MSDN uvádí několik důvodů, proč by aplikace neměly používat rozhraní API IsBadXXXPtr: V předpřipraveném prostředí multitaskingu může některé jiné vlákno změnit přístup procesu k otestované paměti. Deferencování potenciálně neplatných ukazatelů může zakázat rozšíření zásobníku v jiných vláknech. Vlákno, které vyčerpalo zásobník, když bylo zakázáno rozšíření zásobníku, způsobí okamžité ukončení nadřazeného procesu bez automaticky otevíraných oken chyb nebo diagnostických informací. Očekává se, že vlákna v procesu budou spolupracovat takovým způsobem, že jedna nezvolní paměť, kterou ostatní potřebují. Použití této funkce neguje potřebu to udělat. Pokud to neuděláte, aplikace může selhat nepředvídatelným způsobem. Vzhledem ke všem těmto důvodům doporučujeme tato rozhraní API nikdy nepoužívat.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Počáteční adresa.
- Parametr 2 - Velikost bloku paměti.
- Parametr 3 - Neplatná adresa.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: PROBE_INVALID_ADDRESS
- Zastavte kód: 0x603
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Probing free memory.
pravděpodobné příčinyTato stopa se vygeneruje, pokud ověřovatel aplikace zjistí volání IsBadXXXPtr pro přidělení paměti, které je zdarma. To je velmi špatné, protože je možné, že v některých jiných případech byla tato paměť znovu použita pro některé další přidělení. Vzhledem k tomu, že aktuální cesta kódu (kb) vlastní danou paměť, může dojít k poškození paměti někoho jiného, a to katastrofálními účinky. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč volající funkce IsBadXXXPtr skončil testování volné paměti. Adresa může být neinicializovaná (např. neinicializovaný ukazatel) nebo možná již uvolněná paměť. Pokud už paměť uvolnil jeden z rozhraní API VirtualFree nebo UnmapViewOfFile, vyhledá parametr !avrf -vs -a parametr3 protokol trasování zásobníku cest kódu, které přidělily nebo uvolnily danou adresu, a pokud jsou k dispozici, zobrazí trasování zásobníku. Může se zobrazit trasování zásobníku, které tuto paměť uvolnilo. Častěji je paměť již uvolněným přidělením haldy. Chcete-li zkontrolovat, zda je tato možnost dostupná, vyhledá parametr !avrf -hp -a parametr3 protokol trasování zásobníku cest kódu, které přidělily nebo uvolnily danou adresu z/do haldy, a zobrazí trasování zásobníku, pokud jsou k dispozici. Knihovna MSDN uvádí několik důvodů, proč by aplikace neměly používat rozhraní API IsBadXXXPtr: V předpřipraveném prostředí multitaskingu může některé jiné vlákno změnit přístup procesu k otestované paměti. Deferencování potenciálně neplatných ukazatelů může zakázat rozšíření zásobníku v jiných vláknech. Vlákno, které vyčerpalo zásobník, když bylo zakázáno rozšíření zásobníku, způsobí okamžité ukončení nadřazeného procesu bez automaticky otevíraných oken chyb nebo diagnostických informací. Očekává se, že vlákna v procesu budou spolupracovat takovým způsobem, že jedna nezvolní paměť, kterou ostatní potřebují. Použití této funkce neguje potřebu to udělat. Pokud to neuděláte, aplikace může selhat nepředvídatelným způsobem. Vzhledem ke všem těmto důvodům doporučujeme tato rozhraní API nikdy nepoužívat.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Počáteční adresa.
- Parametr 2 - Velikost bloku paměti.
- Parametr 3 - Adresa stránky volného paměti.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: PROBE_FREE_MEM
- Zastavte kód: 0x604
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Probing a guard page.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud ověřovatel aplikace zjistí volání IsBadXXXPtr pro přidělení paměti, které obsahuje alespoň jeden GUARD_PAGE. To je velmi špatné, protože je velmi možné, že tato GUARD_PAGE je konec aktuálního zásobníku vlákna. Jak je uvedeno v knihovně MSDN: Dereferencing potenciálně neplatných ukazatelů může zakázat rozšíření zásobníku v jiných vláknech. Vlákno, které vyčerpalo zásobník, když bylo zakázáno rozšíření zásobníku, způsobí okamžité ukončení nadřazeného procesu bez automaticky otevíraných oken chyb nebo diagnostických informací. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč volající funkce IsBadXXXPtr skončil probít GUARD_PAGE. Knihovna MSDN uvádí několik důvodů, proč by aplikace neměly používat rozhraní API IsBadXXXPtr: V předpřipraveném prostředí multitaskingu může některé jiné vlákno změnit přístup procesu k otestované paměti. Deferencování potenciálně neplatných ukazatelů může zakázat rozšíření zásobníku v jiných vláknech. Vlákno, které vyčerpalo zásobník, když bylo zakázáno rozšíření zásobníku, způsobí okamžité ukončení nadřazeného procesu bez automaticky otevíraných oken chyb nebo diagnostických informací. Očekává se, že vlákna v procesu budou spolupracovat takovým způsobem, že jedna nezvolní paměť, kterou ostatní potřebují. Použití této funkce neguje potřebu to udělat. Pokud to neuděláte, aplikace může selhat nepředvídatelným způsobem. Vzhledem ke všem těmto důvodům doporučujeme tato rozhraní API nikdy nepoužívat.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Počáteční adresa.
- Parametr 2 - Velikost bloku paměti.
- Parametr 3 - Adresa strážné stránky.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: PROBE_GUARD_PAGE
- Zastavte kód: 0x605
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Probing NULL address.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud ověřovatel aplikace zjistí volání IsBadXXXPtr s adresou NULL. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč volající funkce IsBadXXXPtr skončil s adresou NULL. Obvykle se jedná o znaménko někoho, kdo nekontroluje návratovou hodnotu některé z funkcí přidělení paměti. Například následující kód je nesprávný:
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.
}
Tento kód by se měl znovu napsat takto:
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.
//
}
Knihovna MSDN uvádí několik důvodů, proč by aplikace neměly používat rozhraní API IsBadXXXPtr: V předpřipraveném prostředí multitaskingu může některé jiné vlákno změnit přístup procesu k otestované paměti. Deferencování potenciálně neplatných ukazatelů může zakázat rozšíření zásobníku v jiných vláknech. Vlákno, které vyčerpalo zásobník, když bylo zakázáno rozšíření zásobníku, způsobí okamžité ukončení nadřazeného procesu bez automaticky otevíraných oken chyb nebo diagnostických informací. Očekává se, že vlákna v procesu budou spolupracovat takovým způsobem, že jedna nezvolní paměť, kterou ostatní potřebují. Použití této funkce neguje potřebu to udělat. Pokud to neuděláte, aplikace může selhat nepředvídatelným způsobem. Vzhledem ke všem těmto důvodům doporučujeme tato rozhraní API nikdy nepoužívat.
Informace zobrazené ověřovatelem aplikací- Parametr 1 – Nepoužívá se.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: PROBE_NULL
- Zastavte kód: 0x606
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Sondování bloku paměti s neplatnou počáteční adresou nebo velikostí
pravděpodobné příčinyTato zarážka se vygeneruje, pokud ověřovatel aplikace zjistí volání IsBadXXXPtr s neplatnou počáteční adresou (například adresou v režimu jádra místo normální adresy uživatelského režimu) nebo neplatnou velikost vyrovnávací paměti, která se má prověřit. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč volající funkce IsBadXXXPtr skončil s neplatnou adresou nebo velikostí. Adresa nebo velikost jsou často prosté falešné, například neinicializované proměnné. Knihovna MSDN uvádí několik důvodů, proč by aplikace neměly používat rozhraní API IsBadXXXPtr: V předpřipraveném prostředí multitaskingu může některé jiné vlákno změnit přístup procesu k otestované paměti. Deferencování potenciálně neplatných ukazatelů může zakázat rozšíření zásobníku v jiných vláknech. Vlákno, které vyčerpalo zásobník, když bylo zakázáno rozšíření zásobníku, způsobí okamžité ukončení nadřazeného procesu bez automaticky otevíraných oken chyb nebo diagnostických informací. Očekává se, že vlákna v procesu budou spolupracovat takovým způsobem, že jedna nezvolní paměť, kterou ostatní potřebují. Použití této funkce neguje potřebu to udělat. Pokud to neuděláte, aplikace může selhat nepředvídatelným způsobem. Vzhledem ke všem těmto důvodům doporučujeme tato rozhraní API nikdy nepoužívat.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Počáteční adresa.
- Parametr 2 - Velikost bloku paměti.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: PROBE_INVALID_START_OR_SIZE
- Zastavte kód: 0x607
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění knihovny DLL s neplatnou velikostí nebo počáteční adresou
pravděpodobné příčinyTato zarážka se vygeneruje, pokud ověřovatel aplikace zjistí uvolnění knihovny DLL s neplatnou počáteční adresou nebo velikostí rozsahu paměti knihovny DLL. To pravděpodobně znamená poškození paměti uvnitř interního ntdll.dll načteného seznamu dll.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - DLL základní adresa paměti.
- Parametr 2 - DLL velikost rozsahu paměti.
- Parametr 3 - DLL name address. K výpisu použijte du.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_DLL_RANGE
- Zastavte kód: 0x608
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění bloku paměti uvnitř rozsahu adres zásobníku aktuálního vlákna
pravděpodobné příčinyTato stopa se vygeneruje, pokud ověřovatel aplikace zjistí VirtualFree pro blok paměti, který je ve skutečnosti součástí zásobníku aktuálního vlákna (!). Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste pochopit, proč funkce, která se nazývá VirtualFree, si myslela, že blok paměti byl dynamicky přidělen nebo mapován, ale ve skutečnosti byla paměť přidělena ze zásobníku.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Alokační základní adresa.
- Parametr 2 - Velikost oblasti paměti.
- Parametr 3 - Stack low limit address.
- Parametr 4 - Stack high limit address.
- Testovací vrstva: Paměť
- ID zastavení: FREE_THREAD_STACK_MEMORY
- Zastavte kód: 0x609
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nesprávný parametr FreeType pro operaci VirtualFree.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud ověřovatel aplikace zjistí VirtualFree s nesprávnou hodnotou parametru FreeType. Pouze dvě přijatelné hodnoty pro tento parametr jsou MEM_DECOMMIT a MEM_RELEASE. Pokud virtualFree je volána s libovolnou jinou hodnotou kromě těchto dvou, VirtualFree se nezdaří uvolnit paměť. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb): Volající virtualFree je pravděpodobně viníkem.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Nesprávná hodnota používaná aplikací.
- Parametr 2 - Byl očekáváno správná hodnota 1.
- Parametr 3 - Byl očekáváno správná hodnota 2.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_FREE_TYPE
- Zastavte kód: 0x60A
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Pokoušíte se uvolnit blok virtuální paměti, který je již volný.
pravděpodobné příčinyTato stopa se vygeneruje, pokud ověřovatel aplikace zjistí VirtualFree pro adresu, která je již zdarma. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč je paměť již volná, ale aplikace se ji pokouší znovu uvolnit. !avrf -vs -a parametr1 vyhledá protokol trasování zásobníku cest kódu, které přidělily nebo uvolnily danou adresu, a zobrazí trasování zásobníku, pokud jsou k dispozici. Může se zobrazit trasování zásobníku, které tuto paměť uvolnilo.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa bloku paměti.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: MEM_ALREADY_FREE
- Zastavte kód: 0x60B
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nesprávný parametr Size pro operaci VirtualFree (MEM_RELEASE).
pravděpodobné příčinyToto zastavení se vygeneruje, pokud ověřovatel aplikace zjistí VirtualFree (MEM_RELEASE) s nenulovou hodnotou parametru dwSize. Při použití MEM_RELEASE je jediná přijatelná hodnota pro tento parametr 0. Pokud je volána VirtualFree s jakoukoli jinou hodnotou s výjimkou 0, VirtualFree se nezdaří uvolnit paměť. Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb): Volající virtualFree je pravděpodobně viníkem.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Nesprávná velikost používaná aplikací.
- Parametr 2 - Očekávaná správná velikost (0).
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_FREE_SIZE
- Zastavte kód: 0x60C
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neočekávaná výjimka vyvolaná v rutině vstupního bodu knihovny DLL
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce vstupního bodu knihovny DLL (DllMain) vyvolává výjimku. Jedním z příkladů, proč je to špatně: pokud dllMain(DLL_PROCESS_ATTACH) vyvolává výjimku, zavaděč knihovny Windows DLL bude: - Zachycení a skrytí výjimky; - Uvolněte knihovnu DLL bez volání knihovny DllMain(DLL_PROCESS_DETACH). V mnoha případech knihovna DLL již přidělila některé prostředky, pak vyvolala výjimku a nebude mít šanci uvolnit tyto prostředky v dllMain (DLL_PROCESS_DETACH). Ladění tohoto zastavení:
- **du \<*parameter1*\>** – pro zobrazení názvu knihovny DLL. - **.exr \<*parametr2*\>** – pro zobrazení informací o výjimce. - **.cxr \<*parameter3*\>** následované **kb** – zobrazení informací o kontextu výjimky a trasování zásobníku po dobu, kdy byla výjimka vyvolána. - **\<*parameter4*\>** je adresa interní struktury ověřovatele a nemá pro většinu uživatelů ověřovatele žádný význam. Informace zobrazené ověřovatelem aplikací- Parametr 1 - DLL name (use du to dump it).
- Parametr 2 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 3 - Kontextový záznam. K zobrazení použijte .cxr.
- Parametr 4 - Verifier dll popisovač
- Testovací vrstva: Paměť
- ID zastavení: DLL_UNEXPECTED_EXCEPTION
- Zastavte kód: 0x60D
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neočekávaná výjimka vyvolaná ve funkci vlákna
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce vlákna vyvolává výjimku. To je špatné, protože celý proces bude zabit. Ladění tohoto zastavení:
- < parametr1> může být významný pro typ výjimky. Například kód výjimky C0000005 znamená porušení přístupu.
- Parametr .exr2>< – zobrazení informací o výjimce
- Parametr .cxr3 <> následovaný kb – zobrazení informací o kontextu výjimky
- Parametr 1 - Exception code.
- Parametr 2 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 3 - Kontextový záznam. K zobrazení použijte .cxr.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: THREAD_UNEXPECTED_EXCEPTION
- Zastavte kód: 0x60E
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Při sondování paměti došlo k neočekávané výjimce.
pravděpodobné příčinyPokud během volání IsBadXXXPtr dojde k výjimce, vygeneruje se tato zarážka. To znamená, že vyrovnávací paměť, kterou provádíme, ve skutečnosti nemá ochranu, kterou volající předpokládá, nebo že paměť již byla uvolněna atd. Další příklady použití rozhraní API IsBadXXXPtr se nedoporučuje, podívejte se na výše uvedenou diskuzi o jiných zastavovacích kódech (PROBE_INVALID_ADDRESS, PROBE_FREE_MEM, PROBE_GUARD_PAGE, PROBE_NULL, PROBE_INVALID_START_OR_SIZE). Ladění tohoto zastavení:
- < parametr1> obvykle bude C0000005, porušení přístupu.
- Parametr .exr2>< – zobrazení informací o výjimce
- Parametr .cxr3 <> následovaný kb – zobrazení informací o kontextu výjimky a trasování zásobníku v době, kdy byla výjimka vyvolána
- Parametr 1 - Exception code.
- Parametr 2 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 3 - Kontextový záznam. K zobrazení použijte .cxr.
- Parametr 4 - Nepoužívané
- Testovací vrstva: Paměť
- ID zastavení: PROBE_UNEXPECTED_EXCEPTION
- Zastavte kód: 0x60F
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Probíhá pokus o resetování adresy NULL.
pravděpodobné příčinyTato stopa se vygeneruje, pokud ověřovatel aplikace zjistí volání VirtualFree (MEM_RESET) s prvním parametrem NULL. MEM_RESET by se měla použít pouze pro již přidělenou paměť, takže hodnota NULL není v tomto případě platným prvním parametrem.
Informace zobrazené ověřovatelem aplikací- Parametr 1 – Nepoužívá se.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_MEM_RESET
- Zastavte kód: 0x610
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění bloku paměti haldy uvnitř rozsahu adres zásobníku aktuálního vlákna
pravděpodobné příčinyTato stopa se vygeneruje, pokud ověřovatel aplikace zjistí heapFree, pro blok paměti, který je ve skutečnosti součástí zásobníku aktuálního vlákna (!). Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč funkce, která se nazývá HeapFree, si myslela, že blok paměti byl dynamicky přidělen nebo mapován, ale ve skutečnosti byla paměť přidělena ze zásobníku.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Alokační základní adresa.
- Parametr 2 - Velikost oblasti paměti.
- Parametr 3 - Stack low limit address.
- Parametr 4 - Stack high limit address.
- Testovací vrstva: Paměť
- ID zastavení: FREE_THREAD_STACK_MEMORY_AS_HEAP
- Zastavte kód: 0x612
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zrušte mapování oblasti paměti uvnitř rozsahu adres zásobníku aktuálního vlákna.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud ověřovatel aplikace zjistí UnmapViewOfFile pro blok paměti, který je ve skutečnosti součástí zásobníku aktuálního vlákna (!). Pokud chcete tuto stopu ladit, podívejte se na aktuální trasování zásobníku (kb) a zkuste zjistit, proč funkce, která se nazývá UnmapViewOfFile, myslela, že blok paměti byl dynamicky přidělen nebo mapován, ale ve skutečnosti byla paměť přidělena ze zásobníku.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Alokační základní adresa.
- Parametr 2 - Velikost oblasti paměti.
- Parametr 3 - Stack low limit address.
- Parametr 4 - Stack high limit address.
- Testovací vrstva: Paměť
- ID zastavení: FREE_THREAD_STACK_MEMORY_AS_MAP
- Zastavte kód: 0x613
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nesprávná RTL_RESOURCE adresa.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se aplikace pokouší použít hodnotu NULL nebo jinou nesprávnou adresu (např. adresu v režimu jádra) jako adresu platného objektu. RtlInitializeResource (NULL) je nesprávné volání rozhraní API, které aktivuje tento druh zastavení ověřovatele. *Parametr1* je použitá nesprávná adresa a viník je na trasování zásobníku (zobrazte ji s kB).
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_RESOURCE_ADDRESS
- Zastavte kód: 0x614
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neplatná kritická adresa oddílu
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se aplikace pokouší použít hodnotu NULL nebo jinou nesprávnou adresu (např. adresu v režimu jádra) jako adresu platného objektu. EnterCriticalSection(NULL) je nesprávné volání rozhraní API, které aktivuje tento druh ověřovacího zastavení. *Parametr1* je použitá nesprávná adresa a viník je na trasování zásobníku (zobrazte ji s kB).
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Adresa.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_CRITSECT_ADDRESS
- Zastavte kód: 0x615
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Pokus o spuštění kódu v paměti, která není spustitelná.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se aplikace pokouší spustit kód z adresy, která není spustitelná nebo bezplatná. Ladění tohoto zastavení:
- u <parameter2> – pro zrušení sestavení viníkového kódu
- Parametr .exr3>< – zobrazení informací o výjimce
- Parametr .cxr4 <> následovaný kb – zobrazení informací o kontextu výjimky a trasování zásobníku po dobu, kdy byla výjimka vyvolána.
- Parametr 1 - Adresa, ke které se přistupuje.
- Parametr 2 - Kód provádějící neplatný přístup.
- Parametr 3 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 4 - Kontextový záznam. K zobrazení použijte .cxr.
- Testovací vrstva: Paměť
- ID zastavení: THREAD_UNEXPECTED_EXCEPTION_CODE
- Zastavte kód: 0x616
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Při inicializaci výstupní vyrovnávací paměti došlo k neočekávané výjimce.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud při inicializaci vyrovnávací paměti určené jako výstupní parametr pro rozhraní API Win32 nebo CRT dojde k výjimce. Obvykle to znamená, že zadaná velikost výstupní vyrovnávací paměti je nesprávná. Ladění tohoto zastavení:
- Parametr .exr3>< – zobrazení informací o výjimce
- Parametr .cxr4 <> následovaný kb – zobrazení informací o kontextu výjimky a trasování zásobníku v době, kdy byla výjimka vyvolána.
- Parametr 1 - Počáteční adresa vyrovnávací paměti.
- Parametr 2 - Velikost vyrovnávací paměti.
- Parametr 3 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 4 - Kontextový záznam. K zobrazení použijte .cxr.
- Testovací vrstva: Paměť
- ID zastavení: OUTBUFF_UNEXPECTED_EXCEPTION
- Zastavte kód: 0x617
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Při pokusu o vyhledání velikosti bloku haldy došlo k neočekávané výjimce.
pravděpodobné příčinyPokud při volání haldy pro blok haldy, která se uvolní, se vygeneruje tato stopa, pokud se při volání haldy zobrazí výjimka. Obvykle to znamená, že zadaná adresa bloku haldy je nesprávná nebo je poškozená halda. Ladění tohoto zastavení:
- Parametr .exr3>< – zobrazení záznamu výjimky
- Parametr .cxr4 <> následovaný kb – zobrazení informací o kontextu výjimky a trasování zásobníku v době, kdy byla výjimka vyvolána.
- Parametr 1 - Adresa bloku haldy, která je uvolněna.
- Parametr 2 - Haldy rukojeť.
- Parametr 3 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 4 - Kontextový záznam. K zobrazení použijte .cxr.
- Testovací vrstva: Paměť
- ID zastavení: SIZE_HEAP_UNEXPECTED_EXCEPTION
- Zastavte kód: 0x618
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Uvolnění bloku paměti s neplatnou počáteční adresou
pravděpodobné příčinyToto zastavení se vygeneruje, pokud program volá VirtualFree (MEM_RELEASE) s parametrem lpAddress, který není základní adresou vrácenou funkcí VirtualAlloc nebo VirtualAllocEx, když byla oblast stránek vyhrazena; Ladění tohoto zastavení:
- kb - k zobrazení aktuální trasování zásobníku, který volá VirtualFree. Pravděpodobnou vinou je knihovna DLL, která volá VirtualFree.
- Parametr 1 - Adresa bloku paměti, který se uvolní.
- Parametr 2 - Byla očekáváná správná adresa bloku paměti.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_FREEMEM_START_ADDRESS
- Zastavte kód: 0x619
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zrušení mapování bloku paměti s neplatnou počáteční adresou
pravděpodobné příčinyToto zastavení je generováno, pokud program volá UnmapViewOfFile s lpBaseAddress parametr, který není identický s hodnotou vrácenou předchozím voláním MapViewOfFile nebo MapViewOfFileEx funkce. Ladění tohoto zastavení:
- kb - k zobrazení aktuální trasování zásobníku, který volá UnmapViewOfFile. Pravděpodobnou vinou je knihovna DLL, která volá UnmapViewOfFile.
- Parametr 1 - Adresa bloku paměti, který se nemapuje.
- Parametr 2 - Byla očekáváná správná adresa bloku paměti.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: INVALID_UNMAPVIEW_START_ADDRESS
- Zastavte kód: 0x619
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Neočekávaná výjimka vyvolaná ve funkci zpětného volání fondu vláken
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce zpětného volání ve vlákně fondu vláken vyvolává výjimku. Ladění tohoto zastavení:
- < parametr1> může být významný pro typ výjimky. Například kód výjimky C0000005 znamená porušení přístupu.
- Parametr .exr2>< – zobrazení informací o výjimce
- Parametr .cxr3 <> následovaný kb – zobrazení informací o kontextu výjimky.
- Parametr 1 - Exception code
- Parametr 2 - Exception record. Zobrazení pomocí souboru .exr
- Parametr 3 - Kontextový záznam. Zobrazení pomocí .cxr
- Parametr 4 - Nepoužívané
- Testovací vrstva: Paměť
- ID zastavení: THREADPOOL_UNEXPECTED_EXCEPTION
- Zastavte kód: 0x61B
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Kód v paměti, která není spustitelná
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se aplikace pokouší spustit kód z adresy, která není spustitelná nebo bezplatná. Ladění tohoto zastavení:
- u <parameter2> – pro zrušení sestavení viníkového kódu
- Parametr .exr3>< – zobrazení informací o výjimce
- Parametr .cxr4 <> následovaný kb – zobrazení informací o kontextu výjimky a trasování zásobníku po dobu, kdy byla výjimka vyvolána.
- Parametr 1 - Adresa, ke které se přistupuje
- Parametr 2 - Kód provádějící neplatný přístup
- Parametr 3 - Exception record. K jeho zobrazení použijte .exr.
- Parametr 4 - Kontextový záznam. K zobrazení použijte .cxr.
- Testovací vrstva: Paměť
- ID zastavení: THREADPOOL_UNEXPECTED_EXCEPTION_CODE
- Zastavte kód: 0x61C
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Vytváření spustitelné haldy
pravděpodobné příčinyToto zastavení se vygeneruje, pokud aplikace vytváří spustitelné haldy. Může to být bezpečnostní riziko.
Informace zobrazené ověřovatelem aplikací- Parametr 1 – Nepoužívá se.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: EXECUTABLE_HEAP
- Zastavte kód: 0x1D
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Přidělování spustitelné paměti.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud aplikace přiděluje spustitelné paměti. Může to být bezpečnostní riziko.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Ochrana stránky určená volajícím.
- Parametr 2 – Nepoužívá se.
- Parametr 3 – Nepoužívá se.
- Parametr 4 – Nepoužívá se.
- Testovací vrstva: Paměť
- ID zastavení: EXECUTABLE_MEMORY
- Zastavte kód: 0x1E
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Podrobnosti o zastavení protokolu TLS
Uvolnění knihovny DLL, která přidělila index TLS, který nebyl uvolněn.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se před uvolněním indexu TLS uvolní knihovna DLL, která přidělila index TLS. Ladění tohoto zastavení:
- du <parameter3> - display the name of theprit DLL
- .reload xxx.dll=<parameter4> – symboly opětovného načtení pro knihovnu DLL v případě potřeby xxx.dll je název knihovny DLL zobrazené v předchozím kroku.
- u <parameter2> – rozebere kód, který přidělil tls. To by mělo odkazovat na funkci, která přidělila protokol TLS, ale zapomněla ho uvolnit před uvolněním knihovny DLL.
- Parametr 1 - TLS index
- Parametr 2 - Adresa kódu, který přidělil tento index TLS.
- Parametr 3 - DLL name address. K výpisu použijte du.
- Parametr 4 - DLL základní adresa.
- Testovací vrstva: TLS
- ID zastavení: TLS_LEAK
- Zastavte kód: 0x350
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Poškozená struktura ověřovače TLS.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud jsou poškozeny interní struktury pro ověření použité k uložení stavu slotů TLS pro vlákno. Velmi pravděpodobné je, že to je způsobeno náhodným poškozením v procesu.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - TEB adresa.
- Parametr 2 - Očekávaná adresa TEB.
- Parametr 3 - THREAD ID.
- Parametr 4 - Očekávané ID vlákna.
- Testovací vrstva: TLS
- ID zastavení: CORRUPTED_TLS
- Zastavte kód: 0x351
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Použití neplatného indexu TLS
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se použije neplatný index TLS. Ve většině případů je to proto, že kód stále používá tento index, když se volá TlsFree. Tady je příklad vlákna fondu vláken.
- T1: Dll načte a TlsAlloc
- T1: Zpětné volání fronty
- T1: Přeskočeno čekání nebo zrušení zpětného volání
- T1: TlsFree
- T2: Volání zpětného volání běží a volá TlsSetValue
- T1: Uvolnění dll
- Parametr 1 - TLS index
- Parametr 2 - Nepoužívá se.
- Parametr 3 - Nepoužívá se.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: TLS
- ID zastavení: INVALID_TLS_INDEX
- Zastavte kód: 0x352
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Podrobnosti o zastavení fondu vláken
Priorita tohoto vlákna fondu vláken byla změněna.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se při vrácení do fondu vláken změní priorita vlákna.
Informace zobrazené ověřovatelem aplikací- Formát: - vlákno fondu vláken (%x) s prováděním zpětného volání (%p) má změněnou prioritu vlákna (%i -> %i)
- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Aktuální priorita.
- Testovací vrstva: Fond vláken
- ID zastavení: INCONSISTENT_PRIORITY
- Zastavte kód: 0x700
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Spřažení tohoto vlákna fondu vláken bylo změněno.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud se při vrácení do fondu vláken změní spřažení vlákna.
Informace zobrazené ověřovatelem aplikací- Formát: - threadpool threadpool (%x) s prováděním zpětného volání (%p) má změněnou masku spřažení vláken (%p -> %p)
- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Aktuální spřažení.
- Testovací vrstva: Fond vláken
- ID zastavení: INCONSISTENT_AFFINITY_MASK
- Zastavte kód: 0x701
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nezpracované msg ve fondu msg aktuálního vlákna.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud se do fondu vrátí nějaká zpráva, která zbyla jako nezpracovaná. Je nebezpečné, protože se zpracuje v úplně jiném kontextu. Použijte prosím !avrf -tp <Param4> k zobrazení zpráv publikovaných do tohoto vlákna.
Informace zobrazené ověřovatelem aplikací- Formát: - threadpool threadpool (%x) s prováděním zpětného volání (%p) má nevyřešenou zprávu okna (%x: %x)
- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Threadpool thread id. Pokud chcete zobrazit zprávy publikované do tohoto vlákna, použijte !avrf -tp <threadid> .
- Testovací vrstva: Fond vláken
- ID zastavení: ORPHANED_THREAD_MESSAGE
- Zastavte kód: 0x702
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Nezařazené okno patří do aktuálního vlákna.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud je při vrácení tohoto vlákna fondu vláken do fondu zachováno jakékoli okno.
Informace zobrazené ověřovatelem aplikací- Formát: - vlákno fondu vláken (%x) s prováděním zpětného volání (%p) má platný hwnd (%x: %s), který by mohl přijímat zprávy
- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Threadpool thread id.
- Testovací vrstva: Fond vláken
- ID zastavení: ORPHANED_THREAD_WINDOW
- Zastavte kód: 0x703
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
ExitThread() nebo TerminateThread() ve vlákně fondu vláken.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud je exitThread volán ve vlákně fondu vláken. Je zakázáno, protože bude systém nestabilní. Způsobí únik prostředků, zablokování nebo av.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: ILLEGAL_THREAD_TERMINATION
- Zastavte kód: 0x704
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Vlákno je ve stavu zosobnění, když se vrátí do vlákna fondu vláken.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce zpětného volání změní token vlákna tak, aby zosobnil jiného uživatele, a zapomněli ho resetovat před vrácením zpět do fondu vláken.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: THREAD_IN_IMPERSONATION
- Zastavte kód: 0x705
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Volá se funkce, která vyžaduje trvalé vlákno.
pravděpodobné příčinyNěkterá rozhraní API systému Microsoft Windows je potřeba volat uvnitř vyhrazeného nebo trvalého vlákna. V fondu vláken byste se obecně měli vyhnout použití místního úložiště vlákna a zařazování asynchronních volání do fronty, které vyžadují trvalé vlákno, jako je regNotifyChangeKeyValue funkce. Tyto funkce je však možné zařadit do trvalého pracovního vlákna pomocí QueueUserWorkItem s možností WT_EXECUTEINPERSISTENTTHREAD. Volajícímu se zobrazí znalostní báze v ladicím programu.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: PERSISTED_THREAD_NEEDED
- Zastavte kód: 0x706
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Vlákno je ve stavu špinavé transakce.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud funkce zpětného volání zapomněla zavřít nebo obnovit aktuální popisovač transakce.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Transaction Handle.
- Testovací vrstva: Fond vláken
- ID zastavení: DIRTY_TRANSACTION_CONTEXT
- Zastavte kód: 0x707
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Tento stav fondu vláken má nevyvážené volání CoInit a CoUnInit.
pravděpodobné příčinyTato stopa se vygeneruje, pokud volání zpět funkce volá CoInit a CoUnInit nevyvážené.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Vyvážené počty hovorů.
- Testovací vrstva: Fond vláken
- ID zastavení: DIRTY_COM_STATE
- Zastavte kód: 0x708
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Parametry objektu časovače jsou nekonzistentní. Tečka by měla být 0, pokud je při vytváření časovače zadáno WT_EXECUTEONLYONCE.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud doba signálu časovače není nulová, pokud je časovač nastaven na signál pouze jednou s příznakem WT_EXECUTEONLYONCE
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Zadané období.
- Parametr 2 - Flags specified.
- Parametr 3 - Nepoužívá se.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: INCONSISTENT_TIMER_PARAMS
- Zastavte kód: 0x709
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Zámek zavaděče byl uložen vláknem fondu vláken v rámci zpětného volání.
pravděpodobné příčinyToto zastavení se vygeneruje, pokud je zámek zavaděče uložen v rámci zpětného volání a není uvolněn při vrácení vlákna do fondu vláken.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: LOADER_LOCK_HELD
- Zastavte kód: 0x7A
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Upřednostňovaný jazyk je nastaven vláknem fondu vláken v rámci zpětného volání.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud je upřednostňovaný jazyk nastavený v rámci zpětného volání a při vrácení vlákna do fondu vláken se nevymaže.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: PREFERRED_LANGUAGES_SET
- Zastavte kód: 0x7B
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Priorita pozadí je nastavena vláknem fondu vláken v rámci zpětného volání.
pravděpodobné příčinyTato zarážka se vygeneruje, pokud je v rámci zpětného volání nastavena priorita pozadí a při vrácení vlákna do fondu vláken se nezakážou.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Callback function.
- Parametr 2 - Kontext.
- Parametr 3 - Threadpool Object allocation stack trace, use dps to dump it.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: BACKGROUND_PRIORITY_SET
- Zastavte kód: 0x7C
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
TerminateThread() ve vlákně fondu vláken.
pravděpodobné příčinyTato stopa se vygeneruje, pokud je terminateThread volána ve vlákně fondu vláken. Je zakázáno, protože bude systém nestabilní. Způsobí únik prostředků, zablokování nebo av.
Informace zobrazené ověřovatelem aplikací- Parametr 1 - Nepoužívá se.
- Parametr 2 - Nepoužívá se.
- Parametr 3 - Nepoužívá se.
- Parametr 4 - Nepoužívá se.
- Testovací vrstva: Fond vláken
- ID zastavení: ILLEGAL_THREAD_TERMINATION
- Zastavte kód: 0x7D
- závažnost : chyba
- jednorázová chyba:
- Zpráva o chybě : přerušení
- Protokol do souboru: ano
- Vytvořit backtrace: ano
Viz také
Application Verifier – kódy stop a definice
Application Verifier – přehled
Application Verifier – Testování aplikací
Application Verifier – testy v rámci