Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
Många drivrutiner tillhandahåller rutiner för felkontroll av återanrop. När Windows utfärdar en buggkontroll anropas dessa rutiner innan systemet stängs. Dessa rutiner kan ange och skriva till områden med minne som kallas motringningsdata och sekundära motringningsdata.
BugCheckCallback använder KBUGCHECK_CALLBACK_ROUTINE
Data som skrivs av den här rutinen blir en del av återanropsdata. Data ingår inte i kraschdumpningsfilen.
BugCheckSecondaryDumpDataCallback använder KBUGCHECK_REASON_CALLBACK_ROUTINE
Data som skrivs av den här rutinen blir en del av sekundära callback-data. Den data ingår i kraschdumpfilen.
BugCheckAddPagesCallback använder KBUGCHECK_REASON_CALLBACK_ROUTINE
Sidor som specificeras av denna procedur blir en del av återanropsdata. Data på dessa sidor ingår i kraschdumpfilen.
Antalet callback och sekundära callbackdata som är tillgängliga för debuggraren beror på flera faktorer:
Om du utför direkt felsökning av ett kraschat system blir motringningsdata som redan har skrivits av BugCheckCallback eller som angetts av BugCheckAddPagesCallback tillgängliga. Sekundära motringningsdata är inte tillgängliga eftersom de inte lagras på någon fast minnesplats.
Om du felsöker en fullständig minnesdump eller kärnminnesdump kommer motringningsdata som anges av BugCheckAddPagesCallback och sekundära motringningsdata som skrivits av BugCheckSecondaryDumpDataCallback att vara tillgängliga. Återkallningsdata som skrivs av BugCheckCallback kommer inte att vara tillgängliga.
Om du felsöker en liten minnesdump är återuppringningsdata inte tillgängliga. Sekundära motringningsdata kommer att vara tillgängliga.
Mer information om dessa olika dumpfilstorlekar finns i Sorter av Kernel-Mode Dump Files .
Visa återuppringningsdata
Om du vill visa bug check callback-data kan du använda förlängningen !bugdump.
Utan några parametrar visar !bugdump data för alla återanrop.
Om du vill visa data för en specifik återanropsrutin använder du !bugdumpComponent, där komponenten är samma parameter som skickades till KeRegisterBugCheckCallback när den rutinen registrerades.
Visa sekundära motringningsdata
Det finns två metoder för att visa sekundär återuppringningsdata. Du kan använda kommandot .enumtag eller skriva ett eget felsökningstillägg.
Varje block med sekundära motringningsdata identifieras med en GUID-tagg. Den här taggen anges av guid-fältet för parametern (KBUGCHECK_SECONDARY_DUMP_DATA)ReasonSpecificData som skickas till BugCheckSecondaryDumpDataCallback.
Kommandot .enumtag (Räkna upp sekundära motringningsdata) är inte ett mycket exakt instrument. Den visar varje sekundärt datablock, visar taggen och visar sedan data i hexadecimalt och ASCII-format. Det är vanligtvis bara användbart att avgöra vilka taggar som faktiskt används för sekundära datablock.
Om du vill använda dessa data på ett mer praktiskt sätt rekommenderar vi att du skriver ett eget tillägg för felsökningsprogrammet. Det här tillägget måste anropa metoder i dbgeng.h-huvudfilen. Mer information finns i Skriva nya felsökningstillägg.
Om du känner till GUID-taggen för det sekundära datablocket bör tillägget använda metoden IDebugDataSpaces3::ReadTagged för att komma åt data. Prototypen är följande:
STDMETHOD(ReadTagged)(
THIS_
IN LPGUID Tag,
IN ULONG Offset,
OUT OPTIONAL PVOID Buffer,
IN ULONG BufferSize,
OUT OPTIONAL PULONG TotalSize
) PURE;
Här är ett exempel på hur du använder den här metoden:
UCHAR RawData[MY_DATA_SIZE];
GUID MyGuid = .... ;
Success = DataSpaces->ReadTagged( &MyGuid, 0, RawData,
sizeof(RawData), NULL);
Om du anger en BufferSize som är för liten lyckas ReadTagged men skriver bara det begärda antalet byte till bufferten. Om du anger en BufferSize som är för stor lyckas ReadTagged men skriver bara den faktiska blockstorleken till Buffer. Om du anger en pekare för TotalSize använder ReadTagged den för att returnera storleken på det faktiska blocket. Om blocket inte kan nås returnerar ReadTagged en felstatuskod.
Om två block har identiska GUID-taggar returneras det första matchande blocket och det andra blocket är otillgängligt.
Om du inte är säker på GUID-taggen för ditt block kan du använda IDebugDataSpaces3::StartEnumTagged, IDebugDataSpaces3::GetNextTagged och IDebugDataSpaces3::EndEnumTagged-metoder för att räkna upp taggade block. Deras prototyper är följande:
STDMETHOD(StartEnumTagged)(
THIS_
OUT PULONG64 Handle
) PURE;
STDMETHOD(GetNextTagged)(
THIS_
IN ULONG64 Handle,
OUT LPGUID Tag,
OUT PULONG Size
) PURE;
STDMETHOD(EndEnumTagged)(
THIS_
IN ULONG64 Handle
) PURE;
Felsöka återanropsrutiner
Det går också att felsöka själva återanropsrutinen. Brytpunkter inom återanropsrutiner fungerar precis som andra brytpunkter.
Om återanropsrutinen orsakar en andra buggkontroll bearbetas den nya felkontrollen först. Windows upprepar dock inte vissa delar av stoppprocessen, till exempel skrivs inte en andra kraschdumpfil. Stoppkoden som visas på den blå skärmen är den andra felkontrollkoden. Om ett kernelfelsökare är kopplat visas vanligtvis meddelanden om båda buggkontrollerna.