PiPnpRtlPdoRaiseNtPlugPlayPropertyChangeEvent

VOID __fastcall PiPnpRtlPdoRaiseNtPlugPlayPropertyChangeEvent(PVOID BugCheckParameter2, INT64 a2){
  INT64 v3; 
  __int16 *v4; 
  _WORD *v5; 
  VOID **v6; 
  VOID **v7; 
  __int64 v8; 
  _WORD *v9; 
  __int64 v10; 
  _WORD *v11; 
  __int64 v12; 

  if( !BugCheckParameter2 )
    goto LABEL_18;
  v3 = *(_QWORD *)(*((_QWORD *)BugCheckParameter2 + 39) + 40i64);
  if( !v3 || (*(_DWORD *)(v3 + 396) & 0x20000) != 0 )
  {
    IoAddTriageDumpDataBlock(BugCheckParameter2, (_BYTE *)*((unsigned __int16 *)BugCheckParameter2 + 1));
    v4 = (__int16 *)*((_QWORD *)BugCheckParameter2 + 1);
    if( v4 )
    {
      IoAddTriageDumpDataBlock(v4, (_BYTE *)(unsigned int)v4[1]);
      v5 = (_WORD *)(*((_QWORD *)BugCheckParameter2 + 1) + 56i64);
      if( *v5 )
      {
        IoAddTriageDumpDataBlock(v5, (_BYTE *)2);
        IoAddTriageDumpDataBlock(
          *(VOID **)(*((_QWORD *)BugCheckParameter2 + 1) + 64i64),
          (_BYTE *)*(unsigned __int16 *)(*((_QWORD *)BugCheckParameter2 + 1) + 56i64));
      }
    }
    v6 = *(VOID ***)(*((_QWORD *)BugCheckParameter2 + 39) + 40i64);
    if( v6 )
    {
      v7 = v6 + 5;
      IoAddTriageDumpDataBlock(v6, (_BYTE *)0x310);
      if( *(_WORD *)v7 )
      {
        IoAddTriageDumpDataBlock(v7, (_BYTE *)2);
        IoAddTriageDumpDataBlock(v7[1], (_BYTE *)*(unsigned __int16 *)v7);
      }
      v8 = *((_QWORD *)BugCheckParameter2 + 39);
      v9 = (_WORD *)(*(_QWORD *)(v8 + 40) + 56i64);
      if( *v9 )
      {
        IoAddTriageDumpDataBlock(v9, (_BYTE *)2);
        IoAddTriageDumpDataBlock(
          *(VOID **)(*(_QWORD *)(*((_QWORD *)BugCheckParameter2 + 39) + 40i64) + 64i64),
          (_BYTE *)*(unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)BugCheckParameter2 + 39) + 40i64) + 56i64));
        v8 = *((_QWORD *)BugCheckParameter2 + 39);
      }
      v10 = *(_QWORD *)(*(_QWORD *)(v8 + 40) + 16i64);
      if( v10 )
      {
        v11 = (_WORD *)(v10 + 56);
        if( *v11 )
        {
          IoAddTriageDumpDataBlock(v11, (_BYTE *)2);
          v12 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)BugCheckParameter2 + 39) + 40i64) + 16i64);
          IoAddTriageDumpDataBlock(*(VOID **)(v12 + 64), (_BYTE *)*(unsigned __int16 *)(v12 + 56));
        }
      }
    }
LABEL_18:
    KeBugCheckEx(0xCAu, (PVOID)2, BugCheckParameter2, 0i64, 0i64);
  }
  if( v3 != -40 )
    PnpRaiseNtPlugPlayDevicePropertyChangeEvent(v3, *(WCHAR **)(v3 + 48), a2);
}

Referenced by:

PiQueryPowerRelations
PnpDeviceActionWorker