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