IopAddPageDumpRange
NTSTATUS __stdcall IopAddPageDumpRange(_KBUGCHECK_ADD_PAGES *AddPages, UINT8 *ContinueProcessing){
ULONG Flags;
int v5;
int v6;
NTSTATUS result;
UINT8 v8;
unsigned __int64 Count;
bool v10;
__int64 v11;
__int64 v12[2];
__int64 v13[4];
__int128 v14;
v13[0] = 0i64;
v13[1] = 0i64;
v14 = 0i64;
if( ContinueProcessing )
*ContinueProcessing = 0;
Flags = AddPages->Flags;
v5 = Flags & 0xFF0;
v6 = v5 ^ Flags;
AddPages->Flags = v6;
if( (v6 & 0x7FFFFFFC) != 0 )
return -1073741582;
if( v6 >= 0 )
{
v8 = 0;
}
else
{
v6 &= ~0x80000000;
v8 = 1;
AddPages->Flags = v6;
}
if( ((v6 - 1) & v6) != 0 )
return -1073741811;
Count = AddPages->Count;
if( !Count )
return 0;
v10 = (v6 & 1) == 0;
v11 = *(_QWORD *)(CrashdmpDumpBlock + 8);
if( v10 )
v5 |= 2u;
v13[3] = *(_QWORD *)(CrashdmpDumpBlock + 8);
v12[0] = *(_QWORD *)(v11 + 48);
v12[1] = v11 + 56;
v13[2] = (__int64)v12;
if( (*(_DWORD *)(CrashdmpDumpBlock + 1368) & 4) != 0 )
{
DWORD2(v14) |= 3u;
*(_QWORD *)&v14 = &AvailablePagesForPartialDump;
}
result = IoSetDumpRange((__int64)v13, (char *)AddPages->Address, Count, v5);
if( result >= 0 )
{
if( ContinueProcessing )
*ContinueProcessing = v8;
}
return result;
}Referenced by:
IopDumpCallAddPagesCallbacks