Stopp 7F, 0x00000008 (dubbelfel) fel uppstår på grund av ett Single-bit-fel i ESP-registret


Sammanfattning


Det här dokumentet beskrivs varför Windows kan visa felmeddelandet "STOP 0x0000007F, 0x00000008" på datorn på grund av ett visst processor fel. Det här felmeddelandet kan visas när ett Single-bit-fel inträffar i ESP-registret för en processor som körs på datorn. I artikeln beskrivs metoder som hjälper dig att felsöka felet.

Symptom


På en dator som kör en eller flera Intel Xeon-processorer, eller som kör andra processorer, kan Windows Visa ett Stop-felmeddelande som liknar följande:
STOPPA 0x0000007F (0x00000008, 0x00000000, 0x00000000, 0x00000000) UNEXPECTED_KERNEL_MODE_TRAP
När problemet uppstår är följande villkor uppfyllda:
  • Den första parametern i Stop-felet är "0x0000008". (Det här felet är ett undantag för dubbelfel.)
  • På grund av ett Single-bit-fel i den övre halvan av ESP-registret är värdet i ESP-registret utanför stack intervallet för den aktuella tråden.

Orsak


Det här problemet uppstår om en eller flera processorer i datorn:
  • Kräv en mikrokodsuppdatering som inte används av datorns BIOS (Basic Input/Output System).
  • Är skadade eller defekta.
  • Är i drift utanför deras specificerade områden för temperatur, effekt eller andra förhållanden.

Lösning


Lös problemet genom att använda någon av följande metoder för felsökning.

Metod 1: Kontrollera om processorn kör produktions revideringen av mikrokodsuppdateringen

En mikrokodsuppdatering korrigerar errata, eller buggar, i en processorns internt implementerade logik. Mikrokodsuppdateringar kan inte lagras permanent i processorn och måste läsas in i processorn varje gång datorn startas. Mikrokodsuppdateringar kan användas av datorns BIOS eller av drivrutinen Update. sys. Så här identifierar du revideringen av mikrokodsuppdateringen som för närvarande används på en Intel-processor som är installerad på datorn:
  1. Hämta verktyget Intel processor Frequency ID från följande Intel-webbplats:
  2. Installera och kör verktyget Intel-processorfrekvens-ID på datorn som har problem.
  3. Anteckna följande CPU-information för varje processor:
    • CPU-familjen
    • CPU-modell
    • CPU-stegning
    • CPU-revision
    Processorfamiljen, CPU-modellen och processor stegvärden identifierar den specifika typen av processor. CPU-revideringsvärdet identifierar revideringen av mikrokodsuppdateringen som används.
  4. Kontakta datortillverkaren för att avgöra om revideringen av mikrokodsuppdateringen är den mest aktuella versionen som är tillgänglig för en viss processor. Om revideringen inte är den mest aktuella, be datortillverkaren om en uppdaterad BIOS som kommer att tillämpa den mest aktuella mikrokod uppdatering revision.
De symptom som beskrivs i denna artikel har oftast observerats på Intel Xeon-processorer som har CPU-familjen, CPU-modellen och CPU-steg på 15, 2 och 9 respektive och som är installerade på moderkort som använder ServerWorks-chipsets. (CPU-familjen, CPU-modellen och CPU-stegning hexadecimala värden är F, 2 och 9 respektive.) Dessa processorer kräver ett omarbetnings värde på 0x18 eller senare för att fungera korrekt. (0x18 motsvarar ett decimalvärde på 24.) Ett revisions värde på 0 anger att datorns BIOS inte har rätt mikrokodsuppdatering för de processorer som är installerade på datorn. Du måste uppdatera BIOS med en uppdaterings revision för mikrokod som stöder de processorer som du använder. Intel rekommenderar att du använder de senaste uppdateringarna för mikrokod uppdatering för att undvika kända problem.

Metod 2: Bestäm om en processor är skadad eller defekt

Om de processorer som är installerade på de berörda datorerna har produktions mikrokod uppdatering revision tillämpas och symptomen som beskrivs i denna artikel inte förekommer på alla datorer av samma modell som kör samma processorer, kan processorer vara defekt. Ta reda på om en processor är skadad eller defekt genom att flytta processorn till en dator som inte upplever några symptom. Varning Om du ändrar processorer följer du instruktionerna från datortillverkaren eller anlitar lämpliga kvalificerade maskinvarutekniker för att ändra processorerna. Om symptomen fortsätter att inträffa på den ursprungliga datorn med ersättnings processorn, men inte på den andra datorn med den ursprungliga processorn, beror problemet antagligen inte på en skadad eller defekt processor. Om symptomen inte fortsätter att inträffa på den ursprungliga datorn med ersättnings processorn, men inträffar på den andra datorn med den ursprungliga processorn, orsakas problemet antagligen av en skadad eller defekt processor. I så fall kontaktar du datortillverkaren för att ersätta den ursprungliga processorn. Om datorn som drabbas av symptomen som beskrivs i den här artikeln har mer än en processor, flyttar du alla processorer till den andra datorn. Om resultaten visar att en eller flera av dessa processorer kan vara defekta, flytta processorer en i taget för att fastställa processorn eller processorer som kan vara defekt.

Metod 3: Bestäm om en processor fungerar utanför ett angivet intervall av miljöförhållanden

Överdriven rumstemperatur, dålig ventilation eller ansamling av damm kan leda till att elektroniska komponenter, till exempel processorer, beter sig oförutsägbart. Trasiga fläktar eller blockerade luft passager kan orsaka ventilationsproblem. Om insidan eller luften passager av datorn är dammiga, eller om datorn uppvisar symtom när den är installerad endast på en viss plats, system överhettning kan vara en faktor. Se till att komponenterna är rena, att fläktarna fungerar korrekt och att luft passager inte är blockerade. Dessutom, se till att rummet där datorn är placerad är tillräckligt ventilerade. Temperaturen i rummet måste vara inom det arbetsområde som anges av datortillverkaren. Spänning som är högre eller lägre än vad som anges, eller som fluktuerar, kan orsaka att processorer och andra elektroniska komponenter beter sig oförutsägbart. Felaktig eller inkonsekvent huvudström spänning, en överbelastad eller felaktigt fungerande strömförsörjning i datorn, eller felaktigt fungerande moderkort kretsar kan orsaka felaktig eller inkonsekvent spänning som skall levereras till processorn. Kontakta lämpliga tekniker för att kontrollera om något av dessa problem kan vara orsaken till symptomen. Information om hur du kontaktar datortillverkaren finns på följande Microsoft-webbplats:

Mer information


Om du vill veta mer om "STOP 0x0000007F"-fel klickar du på följande artikelnummer och là ¤ visar artikeln i Microsoft Knowledge Base:
137539 allmänna orsaker till Stop 0x0000007F-fel
ESP-registret kallas också för stack pekarens register. En stapel är en datastruktur i minnet som används för att lagra information om det aktuella tillståndet för körningen av en tråd. En tråds stapel används för att hålla reda på funktionsanrop som pågår, av parametrar som skickas till dessa funktioner och av variabler som används av dessa funktioner. Värdet i ESP-registret förväntas peka på den aktuella toppen av stacken. Om värdet i ESP är felaktigt kan det peka på felaktig information eller på en ogiltig adress. Om värdet i ESP pekar på en ogiltig adress, kan ett dubbelfel-undantag uppstå. Så här tar du reda på om Stop-felet är resultatet av ett Single-bit-fel i ESP-registret:
  1. Installera Microsofts felsökningsverktyg för Windows. Om du vill hämta verktygen finns på följande Microsoft-webbplats:
  2. Kör WinDbg-verktyget, klicka på Arkiv, klicka på Öppna kraschdump för att hitta minnesdumpfilen som innehåller information om stoppfel och klicka sedan på OK. Den första Bugcheck-analysen liknar vanligtvis följande:
    ********************************************************************************                                                                             **                        Bugcheck Analysis                                    **                                                                             ********************************************************************************Use !analyze -v to get detailed debugging information.BugCheck 7F, {8, 0, 0, 0}Probably caused by : ntkrnlmp.exe ( nt!KiUnlockDispatcherDatabase+1c )Followup: MachineOwner 
  3. Kör den ! Analyze-v kommando för att få en automatiserad analys av dumpfilen. Följande är ett exempel på utdata från den ! Analyze-v kommando:
    0: kd> !analyze -v********************************************************************************                                                                             **                        Bugcheck Analysis                                    **                                                                             ********************************************************************************UNEXPECTED_KERNEL_MODE_TRAP (7f)This means a trap occurred in kernel mode, and it is a trap of a kindthat the kernel isn't permitted to have/catch (bound trap) or thatis always instant death (double fault).  The first number in thebugcheck params is the number of the trap (8 = double fault, etc)Consult an Intel x86 family manual to learn more about what thesetraps are. Here is a *portion* of those codes:If kv shows a taskGate        use .tss on the part before the colon, then kv.Else if kv shows a trapframe        use .trap on that valueElse        .trap on the appropriate frame will show where the trap was taken        (on x86, this will be the ebp that goes with the procedure KiTrap)Endifkb will then show the corrected stack.Arguments:Arg1: 00000008, EXCEPTION_DOUBLE_FAULTArg2: 00000000Arg3: 00000000Arg4: 00000000Debugging Details:------------------BUGCHECK_STR:  0x7f_8TSS:  00000028 -- (.tss 28)eax=ffdff4dc ebx=f5d299dc ecx=8046f1c0 edx=00000000 esi=853e7a60 edi=00000102eip=8046a86c esp=f5da9948 ebp=f5d2997c iopl=0         nv up ei pl zr na po nccs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010246nt!KiUnlockDispatcherDatabase+0x1c:8046a86c 59               pop     ecxResetting default scopeDEFAULT_BUCKET_ID:  DRIVER_FAULTLAST_CONTROL_TRANSFER:  from 80450bb3 to 8046a86cSTACK_TEXT:  f5d2997c 80450bb3 00000003 f5d299f8 00000001 nt!KiUnlockDispatcherDatabase+0x1cf5d29d48 80466389 00000003 0076fe84 00000001 nt!NtWaitForMultipleObjects+0x385f5d29d48 77f9323e 00000003 0076fe84 00000001 nt!KiSystemService+0xc90076fe5c 77e7a059 00000003 0076fe84 00000001 ntdll!ZwWaitForMultipleObjects+0xb0076feac 77dee9fb 0076fe84 00000001 00000000 KERNEL32!WaitForMultipleObjectsEx+0xea0076ff08 77deea48 0076fed4 0076ff5c 00000000 USER32!MsgWaitForMultipleObjectsEx+0x1530076ff24 6d095a7c 00000002 0076ff5c 00000000 USER32!MsgWaitForMultipleObjects+0x1d0076ff7c 780085bc 00283a90 0062f5ac 0062ffdc IisRTL!SchedulerWorkerThread+0xa70076ff90 8042fa31 85400680 0076ff88 ffffffff MSVCRT!_endthreadex+0xc100283ab8 ffffffff 00000000 00000000 00000000 nt!KiDeliverApc+0x1a100283ab8 ffffffff 00000000 00000000 00000000 0xffffffff0000096c 00000000 00000000 00000000 00000000 0xffffffffFOLLOWUP_IP: nt!KiUnlockDispatcherDatabase+1c8046a86c 59               pop     ecxSYMBOL_STACK_INDEX:  0FOLLOWUP_NAME:  MachineOwnerSYMBOL_NAME:  nt!KiUnlockDispatcherDatabase+1cMODULE_NAME:  ntIMAGE_NAME:  ntkrnlmp.exeDEBUG_FLR_IMAGE_TIMESTAMP:  3ee650b3STACK_COMMAND:  .tss 28 ; kbBUCKET_ID:  0x7f_8_nt!KiUnlockDispatcherDatabase+1cFollowup: MachineOwner 
  4. Undersök utdata från den ! Analyze-v kommando för att se om utdata visar ett dubbelfel villkor. Om det finns ett dubbelfel tillstånd kör du kommandot . TSS 28 för att Visa systemtillståndet vid tidpunkten för dubbel felet. Följande utdata visar till exempel värdena i processorns register för tillfället när ett undantag för dubbelfel inträffade:
    0: kd> .tss 28eax=ffdff4dc ebx=f5d299dc ecx=8046f1c0 edx=00000000 esi=853e7a60 edi=00000102eip=8046a86c esp=f5da9948 ebp=f5d2997c iopl=0         nv up ei pl zr na po nccs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010246nt!KiUnlockDispatcherDatabase+0x1c:8046a86c 59               pop     ecx 
    I föregående exempel är värdet för ESP-registret f5da9948. I allmänhet är detta värde relativt nära värdet av EBP-registret. I föregående exempel är värdet för EBP-registret f5d2997c.
  5. Kör den ! Thread kommando för att visa den aktuella trådens stack intervall. Ett undantag för dubbelfel uppstår vanligtvis när värdet för ESP-registret ligger utanför intervallet av adresser som är reserverade för stacken för den aktuella tråden. Följande är ett exempel på utdata från den ! Thread kommando:
    0: kd> !threadTHREAD 853e7a60  Cid 904.96c  Teb: 7ffdc000  Win32Thread: a21a5c48 RUNNINGNot impersonatingOwning Process 85400680Wait Start TickCount    578275        Elapsed Ticks: 0Context Switch Count    38423                   LargeStackUserTime                  0:00:02.0031KernelTime                0:00:06.0640Start Address KERNEL32!BaseThreadStartThunk (0x77e5b700)Win32 Start Address MSVCRT!_threadstartex (0x78008532)Stack Init f5d2a000 Current f5d29c9c Base f5d2a000 Limit f5d27000 Call 0Priority 8 BasePriority 8 PriorityDecrement 0 DecrementCount 0ChildEBP RetAddr  Args to Child00000000 8046a86c 00000000 00000000 00000000 nt!_KiTrap08+0x41f5d2997c 80450bb3 00000003 f5d299f8 00000001 nt!KiUnlockDispatcherDatabase+0x1cf5d29d48 80466389 00000003 0076fe84 00000001 nt!NtWaitForMultipleObjects+0x385f5d29d48 77f9323e 00000003 0076fe84 00000001 nt!_KiSystemService+0xc90076fe5c 77e7a059 00000003 0076fe84 00000001 ntdll!ZwWaitForMultipleObjects+0xb0076feac 77dee9fb 0076fe84 00000001 00000000 KERNEL32!WaitForMultipleObjectsEx+0xea0076ff08 77deea48 0076fed4 0076ff5c 00000000 USER32!MsgWaitForMultipleObjectsEx+0x1530076ff24 6d095a7c 00000002 0076ff5c 00000000 USER32!MsgWaitForMultipleObjects+0x1d0076ff7c 780085bc 00283a90 0062f5ac 0062ffdc IisRTL!SchedulerWorkerThread+0xa70076ffb4 77e5b382 00283ab8 0062f5ac 0062ffdc MSVCRT!_threadstartex+0x8f0076ffec 00000000 78008532 00283ab8 00000000 KERNEL32!BaseThreadStart+0x52 
    I föregående utdata anger följande information stack intervall värden:
    Stack init f5d2a000 nuvarande f5d29c9c Base f5d2a000 Limit f5d27000 ring 0
    När just den här tråden körs måste ESP-registervärdet alltid vara mellan stack basvärdet (f5d2a000) och gränsvärdet (f5d27000). I allmänhet är värdet för ESP-registret relativt nära det aktuella värdet (f5d29c9c). (Det aktuella värdet är också mellan stacken basvärde och gränsvärde.) I föregående exempel är värdet för ESP-registret f5da9948. Det här värdet ligger betydligt utanför det intervall som krävs. Du kan också kontrollera stacken intervall värden genom att köra den ! PCR kommando. Följande är ett exempel på utdata från kommandot ! PCR :
    0: kd> !pcrPCR Processor 0 @ffdff000NtTib.ExceptionList: f5d29d38    NtTib.StackBase: f5d29df0   NtTib.StackLimit: f5d27000 NtTib.SubSystemTib: 00000000      NtTib.Version: 00000000  NtTib.UserPointer: 00000000      NtTib.SelfTib: 7ffdc000            SelfPcr: ffdff000               Prcb: ffdff120               Irql: 00000000                IRR: 00000000                IDR: ffffffff      InterruptMode: 00000000                IDT: 80036400                GDT: 80036000                TSS: 80474850      CurrentThread: 853e7a60         NextThread: 00000000         IdleThread: 80470600          DpcQueue:  
    NtTib. StackLimit-värdet representerar den undre gränsen för stack intervallet. NtTib. StackBase-värdet representerar ett nyligen värde av ESP. Värdet för NtTib. StackBase kan jämföras med det aktuella värdet i ESP-registret för att identifiera om det finns ett Single-bit-fel i det aktuella ESP-registervärdet.
  6. Kör den . formats ESP ^ EBP kommando för att visa skillnaderna i värden mellan ESP och EBP register. Stack pekarens värde i EBP-registret kommer att vara nära stack pekarens värde i ESP-registret, med undantag för Single-bit-felet. Det här kommandot visar ofta den enda hög ordningens bit som innehåller felet, särskilt när felet visas i binärt format, som det är i följande exempel:
    0: kd> .formats esp ^ ebpEvaluate expression:  Hex:     00080034  Decimal: 524340  Octal:   00002000064  Binary:  00000000 00001000 00000000 00110100  Chars:   ...4  Time:    Tue Jan 06 17:39:00 1970  Float:   low 7.34757e-040 high 0  Double:  2.59058e-318 
    Om du ignorerar de lägre, minst signifikanta siffrorna är enkel bit skillnaden mellan ESP-och EBP-registren 00000000 00001000 00000000 00000000 i binärt format. Skillnaden är 00080000 i hexadecimalt format. Detta Single-bit-fel gör att ESP-registret innehåller ett felaktigt värde. Det felaktiga värdet orsakar ett undantag för dubbelfel, en Bugcheck och en systemkrasch.
Så här skaffar du mer information om din specifika maskinvara:
  1. Använd kommandot ! cpuinfo för att hämta information om CPU-version. Följande är ett exempel på utdata från den ! cpuinfo kommando.
    0: kd> !cpuinfoTargetInfo::ReadMsr is not available in the current debug sessionCP F/M/S Manufacturer  MHz Update Signature Features 0 15,2,9 GenuineIntel 2790>0000000000000000<00002fff 1 15,2,9 GenuineIntel 2790 0000000000000000 00002fff 
    Även om uppdateringssignaturvärdet inte alltid rapporteras korrekt när du analyserar en kraschdumpfil, visar fältet Uppdatera signatur i allmänhet den uppdatering av mikrokodsuppdatering som tillämpas på processorn. I föregående exempel är det här värdet 0 (0000000000000000). Den för närvarande stöds revideringen är 0x18 (0000001800000000), som visas i följande exempel utdata:
    0: kd> !cpuinfoCP F/M/S Manufacturer  MHz Update Signature FeaturesTargetInfo::ReadMsr is not available in the current debug session 0 15,2,9 GenuineIntel 2994>0000001800000000<00033fff 1 15,2,9 GenuineIntel 2994 0000001800000000 00033fff 2 15,2,9 GenuineIntel 2994 0000001800000000 00033fff 3 15,2,9 GenuineIntel 2994 0000001800000000 00033fff 
  2. Använd kommandot ! PCITREE för att hitta leverantör-och enhetsidentifierare (Vendev-ID) för befintliga PCI-enheter (Peripheral Connect Interface). Följande är ett exempel på utdata från den ! PCITREE kommando:
    0: kd> !pcitreeBus 0x0 (FDO Ext 85dceed8)  0600 00141166 (d=0,  f=0) devext 85dcf348 Bridge/HOST to PCI  0600 00141166 (d=0,  f=1) devext 85e110e8 Bridge/HOST to PCI  0600 00141166 (d=0,  f=2) devext 85e11ee8 Bridge/HOST to PCI  0100 00c09005 (d=2,  f=0) devext 85e11ce8 Mass Storage Controller/SCSI  0100 00c09005 (d=2,  f=1) devext 85e11ae8 Mass Storage Controller/SCSI  0300 47521002 (d=3,  f=0) devext 85e11788 Display Controller/VGA  0200 16a614e4 (d=4,  f=0) devext 85e11428 Network Controller/Ethernet  0880 a0f00e11 (d=5,  f=0) devext 85dcdee8 Base System Device/'Other' base system device  0601 02011166 (d=f, f=0) devext 85dcdb88 Bridge/PCI to ISA  0101 02121166 (d=f, f=1) devext 85dcd988 Mass Storage Controller/IDE  0c03 02201166 (d=f, f=2) devext 85dcd628 Serial Bus Controller/USB  0600 02251166 (d=f, f=3) devext 85dcd2c8 Bridge/HOST to PCI  0600 01011166 (d=11, f=0) devext 85e100e8 Bridge/HOST to PCI  0600 01011166 (d=11, f=2) devext 85e10ee8 Bridge/HOST to PCIBus 0x2 (FDO Ext 85dcecd8)  0104 00460e11 (d=2,  f=0) devext 85e0f9a8 Mass Storage Controller/RAIDBus 0x5 (FDO Ext 85dce9d8)No devices have been enumerated on this bus.Total PCI Root busses processed = 3 
    För varje PCI-enhet som visas är det första 8-siffriga hexadecimala värdet (DWORD) på varje rad VenDev-ID. Leverantörs-ID är faktiskt de andra 4-siffrorna i det här värdet. Den första enheten i exemplet ovan har till exempel ett VenDev-ID på 0x00141166. Enhets-ID är 0x0014 och leverantörs-ID är 0x1166. Leverantörs-ID för ServerWorks är 0x1166. Därför är utdata från en processor som är installerad på ett moderkort som använder ServerWorks-chipsets.
Produkter från tredje part som beskrivs i den här artikeln tillverkas av företag som är oberoende av Microsoft. Microsoft lämnar inga garantier, underförstådda eller på annat sätt, avseende prestanda eller tillförlitlighet hos dessa produkter.