IopDumpCallAddPagesCallbacks
VOID __stdcall IopDumpCallAddPagesCallbacks(UINT64 BugCheckCode){
ULONG v1;
KBUGCHECK_REASON_CALLBACK_RECORD *Flink;
NTSTATUS v3;
_KBUGCHECK_ADD_PAGES AddPages;
UINT8 ContinueProcessing;
LIST_ENTRY *PreviousValidEntry;
KBUGCHECK_REASON_CALLBACK_RECORD *v7;
v1 = BugCheckCode;
memset(&AddPages, 0, sizeof(AddPages));
Flink = KeBugCheckAddRemovePagesCallbackListHead;
PreviousValidEntry = (LIST_ENTRY *)&KeBugCheckAddRemovePagesCallbackListHead;
while( 1 )
{
v7 = Flink;
if( Flink == (KBUGCHECK_REASON_CALLBACK_RECORD *)&KeBugCheckAddRemovePagesCallbackListHead )
break;
if( KeValidateBugCheckCallbackRecord(Flink, KbCallbackAddPages, &PreviousValidEntry) )
{
AddPages.Context = 0i64;
AddPages.BugCheckCode = v1;
v3 = 0;
do
{
AddPages.Address = 0i64;
AddPages.Flags = 0;
AddPages.Count = 0i64;
ContinueProcessing = 0;
((void(__fastcall *)(__int64, KBUGCHECK_REASON_CALLBACK_RECORD *, _KBUGCHECK_ADD_PAGES *))Flink->CallbackRoutine)(
4i64,
Flink,
&AddPages);
if( v3 >= 0 )
{
if( AddPages.Count )
v3 = IopAddPageDumpRange(&AddPages, &ContinueProcessing);
}
}
while( ContinueProcessing );
Flink->State = (v3 < 0) + 3;
}
else if( !PreviousValidEntry )
{
return;
}
Flink = (KBUGCHECK_REASON_CALLBACK_RECORD *)Flink->Entry.Flink;
}
}Referenced by:
IoWriteCrashDump
IopAddLiveDumpPagesToPartialKernelDump