DbgkWerAddSecondaryData
INT64 __stdcall DbgkWerAddSecondaryData(PVOID ReportHandle, GUID *Identifier, PVOID Data, UINT64 Size){
UINT64 v4;
int v8;
char *v9;
__int64 v10;
int v11;
INT64 result;
_OWORD *PoolWithTag;
UINT8 *v14;
GUID v15;
v4 = (unsigned int)Size;
if( !ReportHandle || !Data || !Identifier || !(_DWORD)Size )
{
DbgPrintEx(5u, 0, "DBGK: DbgkWerAddSecondaryData: Invalid parameter.\n\n");
return 3221225485i64;
}
v8 = *((_DWORD *)ReportHandle + 25);
if( v8 != 1 )
{
if( v8 != 2 )
return 3221225659i64;
v10 = *((_QWORD *)ReportHandle + 16);
if( v10 )
{
v9 = (char *)(v10 + 32);
goto LABEL_10;
}
return 3221225485i64;
}
v9 = (char *)ReportHandle + 160;
LABEL_10:
v11 = *((_DWORD *)ReportHandle + 23);
if( (unsigned int)Size > v11 - *((_DWORD *)ReportHandle + 24) )
{
DbgPrintEx(
5u,
0,
"DBGK: DbgkWerAddSecondaryData: Secondary data exceeds buffer. Size 0x%x Maxsize 0x%x Datasize 0x%x.\n\n",
(unsigned int)Size,
v11,
*((_DWORD *)ReportHandle + 24));
return 3221225626i64;
}
PoolWithTag = ExAllocatePoolWithTag(PagedPool, 0x28ui64, 0x57676244ui64);
if( !PoolWithTag )
return 3221225495i64;
*PoolWithTag = 0i64;
PoolWithTag[1] = 0i64;
*((_QWORD *)PoolWithTag + 4) = 0i64;
v14 = (UINT8 *)ExAllocatePoolWithTag(PagedPool, (v4 + 4095) & 0xFFFFFFFFFFFFF000ui64, 0x57676244ui64);
*((_QWORD *)PoolWithTag + 2) = v14;
if( !v14 )
{
ExFreePoolWithTag(PoolWithTag, 0x57676244u);
return 3221225495i64;
}
memmove(v14, (UINT8 *)Data, v4);
v15 = *Identifier;
*((_DWORD *)PoolWithTag + 6) = v4;
*PoolWithTag = v15;
*((_DWORD *)ReportHandle + 24) += v4;
if( *((_DWORD *)ReportHandle + 25) == 1 )
++*((_DWORD *)ReportHandle + 44);
*((_QWORD *)PoolWithTag + 4) = *((_QWORD *)v9 + 1);
result = 0i64;
*((_QWORD *)v9 + 1) = PoolWithTag;
return result;
}Referenced by:
No references.