IoSetDevicePropertyData

NTSTATUS __stdcall IoSetDevicePropertyData(
        PDEVICE_OBJECT Pdo,
        const DEVPROPKEY *PropertyKey,
        LCID Lcid,
        ULONG Flags,
        DEVPROPTYPE Type,
        ULONG Size,
        PVOID Data){
  __int64 v8; 
  __int16 *v10; 
  _WORD *v11; 
  PVOID *v12; 
  PVOID *v13; 
  __int64 v14; 
  _WORD *v15; 
  __int64 v16; 
  _WORD *v17; 
  __int64 v18; 
  ULONG_PTR BugCheckParameter4; 
  PVOID v20; 
  if( !Pdo )
    goto LABEL_16;
  v8 = *(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64);
  if( !v8 || (*(_DWORD *)(v8 + 396) & 0x20000) != 0 )
  {
    IoAddTriageDumpDataBlock(Pdo, *((unsigned __int16 *)Pdo + 1));
    v10 = (__int16 *)*((_QWORD *)Pdo + 1);
    if( v10 )
    {
      IoAddTriageDumpDataBlock(v10, (unsigned int)v10[1]);
      v11 = (_WORD *)(*((_QWORD *)Pdo + 1) + 56i64);
      if( *v11 )
      {
        IoAddTriageDumpDataBlock(v11, 2ui64);
        IoAddTriageDumpDataBlock(
          *(PVOID *)(*((_QWORD *)Pdo + 1) + 64i64),
          *(unsigned __int16 *)(*((_QWORD *)Pdo + 1) + 56i64));
      }
    }
    v12 = *(PVOID **)(*((_QWORD *)Pdo + 39) + 40i64);
    if( v12 )
    {
      v13 = v12 + 5;
      IoAddTriageDumpDataBlock(v12, 0x310ui64);
      if( *(_WORD *)v13 )
      {
        IoAddTriageDumpDataBlock(v13, 2ui64);
        IoAddTriageDumpDataBlock(v13[1], *(unsigned __int16 *)v13);
      }
      v14 = *((_QWORD *)Pdo + 39);
      v15 = (_WORD *)(*(_QWORD *)(v14 + 40) + 56i64);
      if( *v15 )
      {
        IoAddTriageDumpDataBlock(v15, 2ui64);
        IoAddTriageDumpDataBlock(
          *(PVOID *)(*(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64) + 64i64),
          *(unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64) + 56i64));
        v14 = *((_QWORD *)Pdo + 39);
      }
      v16 = *(_QWORD *)(*(_QWORD *)(v14 + 40) + 16i64);
      if( v16 )
      {
        v17 = (_WORD *)(v16 + 56);
        if( *v17 )
        {
          IoAddTriageDumpDataBlock(v17, 2ui64);
          v18 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)Pdo + 39) + 40i64) + 16i64);
          IoAddTriageDumpDataBlock(*(PVOID *)(v18 + 64), *(unsigned __int16 *)(v18 + 56));
        }
      }
    }
LABEL_16:
    KeBugCheckEx(0xCAu, 2ui64, (ULONG_PTR)Pdo, 0i64, 0i64);
  }
  LODWORD(v20) = Data != 0i64 ? Size : 0;
  LODWORD(BugCheckParameter4) = Data != 0i64 ? Type : 0;
  return PnpSetDevicePropertyData(Pdo, (DEVPROPKEY *)PropertyKey, Lcid, Lcid, BugCheckParameter4, v20);
}

Referenced by:

HalpInterruptConnect