PnpWatchdogBugcheck

void __fastcall __noreturn PnpWatchdogBugcheck(__int64 a1){
  unsigned __int64 v2; 
  unsigned __int64 v3; 
  VOID **v4; 
  __int64 v5; 
  __int16 *v6; 
  _WORD *v7; 
  __int64 v8; 
  __int64 v9; 
  VOID *v10; 
  __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  _QWORD *v22; 
  unsigned int v23; 
  _WORD *v24; 
  _OWORD BugCheckParameter2[5]; 
  PVOID BugCheckParameter1; 
  VOID *v27; 
  PVOID BugCheckParameter3; 

  memset(BugCheckParameter2, 0i64, sizeof(BugCheckParameter2));
  *(_QWORD *)&BugCheckParameter2[0] = 0x1504E5057i64;
  v2 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart - *(_QWORD *)a1;
  v27 = 0i64;
  BugCheckParameter1 = 0i64;
  BugCheckParameter2[4] = 0i64;
  *(_QWORD *)&BugCheckParameter2[1] = PnpDeviceEventThread;
  *((PVOID *)&BugCheckParameter2[1] + 1) = qword_140CEC8C0[0];
  *(_QWORD *)&BugCheckParameter2[2] = *(&PnpReplaceEvent + 1016);
  *((_QWORD *)&BugCheckParameter2[2] + 1) = (char *)&PnpReplaceEvent + 5920;
  BugCheckParameter2[3] = *(&WheapDeferredInternalLogsEventLock + 337);
  *((_QWORD *)&BugCheckParameter2[0] + 1) = *(unsigned int *)(a1 + 16);
  BugCheckParameter3 = 0i64;
  v3 = v2 / 0x2710;
  PnpWatchdogExtractTriageInformation(
    a1,
    &v27,
    (_LIST_ENTRY **)&BugCheckParameter3,
    &BugCheckParameter2[4],
    (_QWORD *)&BugCheckParameter2[4] + 1);
  v4 = (VOID **)v27;
  *((_QWORD *)&BugCheckParameter2[3] + 1) = v27;
  if( *(_QWORD *)&BugCheckParameter2[4] )
  {
    IoAddTriageDumpDataBlock(
      *(VOID **)&BugCheckParameter2[4],
      (_BYTE *)*(unsigned __int16 *)(*(_QWORD *)&BugCheckParameter2[4] + 2i64));
    v5 = *(_QWORD *)&BugCheckParameter2[4];
    v6 = *(__int16 **)(*(_QWORD *)&BugCheckParameter2[4] + 8i64);
    if( v6 )
    {
      IoAddTriageDumpDataBlock(v6, (_BYTE *)(unsigned int)v6[1]);
      v5 = *(_QWORD *)&BugCheckParameter2[4];
      v7 = (_WORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 8i64) + 56i64);
      if( *v7 )
      {
        IoAddTriageDumpDataBlock(v7, (_BYTE *)2);
        IoAddTriageDumpDataBlock(
          *(VOID **)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 8i64) + 64i64),
          (_BYTE *)*(unsigned __int16 *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 8i64) + 56i64));
        v5 = *(_QWORD *)&BugCheckParameter2[4];
      }
    }
    if( v5 )
      v8 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
    else
      v8 = 0i64;
    if( v8 )
    {
      if( v5 )
        v9 = *(_QWORD *)(*(_QWORD *)(v5 + 312) + 40i64);
      else
        v9 = 0i64;
      if( v5 )
        v10 = *(VOID **)(*(_QWORD *)(v5 + 312) + 40i64);
      else
        v10 = 0i64;
      IoAddTriageDumpDataBlock(v10, (_BYTE *)0x310);
      if( *(_WORD *)(v9 + 40) )
      {
        IoAddTriageDumpDataBlock((VOID *)(v9 + 40), (_BYTE *)2);
        IoAddTriageDumpDataBlock(*(VOID **)(v9 + 48), (_BYTE *)*(unsigned __int16 *)(v9 + 40));
      }
      v11 = *(_QWORD *)&BugCheckParameter2[4];
      if( *(_QWORD *)&BugCheckParameter2[4] )
        v12 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
      else
        v12 = 0i64;
      if( *(_WORD *)(v12 + 56) )
      {
        if( *(_QWORD *)&BugCheckParameter2[4] )
          v13 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
        else
          v13 = 0i64;
        IoAddTriageDumpDataBlock((VOID *)(v13 + 56), (_BYTE *)2);
        if( *(_QWORD *)&BugCheckParameter2[4] )
          v14 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
        else
          v14 = 0i64;
        if( *(_QWORD *)&BugCheckParameter2[4] )
          v15 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
        else
          v15 = 0i64;
        IoAddTriageDumpDataBlock(*(VOID **)(v15 + 64), (_BYTE *)*(unsigned __int16 *)(v14 + 56));
        v11 = *(_QWORD *)&BugCheckParameter2[4];
      }
      if( v11 )
        v16 = *(_QWORD *)(*(_QWORD *)(v11 + 312) + 40i64);
      else
        v16 = 0i64;
      if( *(_QWORD *)(v16 + 16) )
      {
        v17 = v11 ? *(_QWORD *)(*(_QWORD *)(v11 + 312) + 40i64) : 0i64;
        if( *(_WORD *)(*(_QWORD *)(v17 + 16) + 56i64) )
        {
          if( v11 )
            v18 = *(_QWORD *)(*(_QWORD *)(v11 + 312) + 40i64);
          else
            v18 = 0i64;
          IoAddTriageDumpDataBlock((VOID *)(*(_QWORD *)(v18 + 16) + 56i64), (_BYTE *)2);
          if( *(_QWORD *)&BugCheckParameter2[4] )
            v19 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
          else
            v19 = 0i64;
          if( *(_QWORD *)&BugCheckParameter2[4] )
            v20 = *(_QWORD *)(*(_QWORD *)(*(_QWORD *)&BugCheckParameter2[4] + 312i64) + 40i64);
          else
            v20 = 0i64;
          IoAddTriageDumpDataBlock(
            *(VOID **)(*(_QWORD *)(v20 + 16) + 64i64),
            (_BYTE *)*(unsigned __int16 *)(*(_QWORD *)(v19 + 16) + 56i64));
        }
      }
    }
  }
  if( *((_QWORD *)&BugCheckParameter2[4] + 1) )
  {
    v21 = *(_QWORD *)(*((_QWORD *)&BugCheckParameter2[4] + 1) + 48i64) + 24i64;
  }
  else
  {
    if( !v4 )
      goto LABEL_67;
    v21 = (__int64)(v4 + 7);
  }
  if( v21 )
  {
    v22 = *(_QWORD **)(v21 + 8);
    if( v22 )
    {
      v23 = *(unsigned __int16 *)(v21 + 2);
      if( (_WORD)v23 )
      {
        if( v23 < 8 )
          memmove(&BugCheckParameter1, v22, *(unsigned __int16 *)(v21 + 2));
        else
          BugCheckParameter1 = (PVOID)*v22;
      }
    }
    if( v4 )
    {
      IoAddTriageDumpDataBlock(v4, (_BYTE *)0x310);
      if( *((_WORD *)v4 + 20) )
      {
        IoAddTriageDumpDataBlock(v4 + 5, (_BYTE *)2);
        IoAddTriageDumpDataBlock(v4[6], (_BYTE *)*((unsigned __int16 *)v4 + 20));
      }
      if( *((_WORD *)v4 + 28) )
      {
        IoAddTriageDumpDataBlock(v4 + 7, (_BYTE *)2);
        IoAddTriageDumpDataBlock(v4[8], (_BYTE *)*((unsigned __int16 *)v4 + 28));
      }
      v24 = v4[2];
      if( v24 )
      {
        if( v24[28] )
        {
          IoAddTriageDumpDataBlock(v24 + 28, (_BYTE *)2);
          IoAddTriageDumpDataBlock(*((VOID **)v4[2] + 8), (_BYTE *)*((unsigned __int16 *)v4[2] + 28));
        }
      }
    }
  }
LABEL_67:
  KeBugCheckEx(0x1D5u, BugCheckParameter1, BugCheckParameter2, BugCheckParameter3, (PVOID)(unsigned int)v3);
}

Referenced by:

No references.