KeValidateBugCheckCallbackRecord
UINT8 __stdcall KeValidateBugCheckCallbackRecord(
KBUGCHECK_REASON_CALLBACK_RECORD *CallbackRecord,
KBUGCHECK_CALLBACK_REASON CallbackReason,
LIST_ENTRY **PreviousValidEntry){
UINT8 IsAddressValid;
KBUGCHECK_REASON_CALLBACK_RECORD *v7;
unsigned __int64 v8;
unsigned __int64 v9;
__int64 Reason;
PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
UINT8 result;
IsAddressValid = 0;
v7 = 0i64;
if( ((unsigned __int8)CallbackRecord & 7) == 0 )
{
v8 = (unsigned __int64)CallbackRecord & 0xFFFFFFFFFFFFF000ui64;
v9 = ((unsigned __int64)((unsigned __int16)CallbackRecord & 0xFFF) + 4143) >> 12;
if( v9 )
{
while( MmIsAddressValidEx(v8) )
{
v8 += 4096i64;
if( !--v9 )
goto LABEL_5;
}
}
else
{
LABEL_5:
if( CallbackRecord->Entry.Blink == *PreviousValidEntry )
{
v7 = CallbackRecord;
if( IoIsPartialDumpRetry() && (unsigned __int8)(CallbackRecord->State - 3) <= 1u )
CallbackRecord->State = 1;
if( CallbackRecord->State == 1 )
{
Reason = CallbackRecord->Reason;
CallbackRoutine = CallbackRecord->CallbackRoutine;
if( (PKBUGCHECK_REASON_CALLBACK_ROUTINE)CallbackRecord->Checksum == (PKBUGCHECK_REASON_CALLBACK_ROUTINE)((char *)CallbackRoutine + (unsigned __int64)&CallbackRecord->Component[Reason])
&& (_DWORD)Reason == CallbackReason )
{
IsAddressValid = MmIsAddressValidEx((INT64)CallbackRoutine);
}
}
}
}
}
result = IsAddressValid;
*PreviousValidEntry = &v7->Entry;
return result;
}Referenced by:
IopDumpCallAddPagesCallbacks
IopDumpCallRemovePagesCallbacks
IopLiveDumpAddTriageDumpData
IopLiveDumpCallRemovePagesCallbacks
KiInvokeBugCheckAddTriageDumpDataCallbacks
KiInvokeBugCheckEntryCallbacks