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.