IoReportResourceUsage

INT64 __stdcall IoReportResourceUsage(
        UNICODE_STRING *DriverClassName,
        DRIVER_OBJECT *DriverObject,
        CM_RESOURCE_LIST *DriverList,
        UINT64 DriverListSize,
        DEVICE_OBJECT *DeviceObject,
        CM_RESOURCE_LIST *DeviceList,
        UINT64 DeviceListSize,
        UINT8 OverrideConflict,
        UINT8 *ConflictDetected){
  __int64 v10; 
  __int16 *v11; 
  _WORD *v12; 
  PVOID *v13; 
  PVOID *v14; 
  __int64 v15; 
  _WORD *v16; 
  __int64 v17; 
  _WORD *v18; 
  __int64 v19; 
  CM_RESOURCE_LIST *BugCheckParameter4; 
  if( DeviceObject )
  {
    v10 = *(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64);
    if( v10 )
    {
      if( (*(_DWORD *)(v10 + 396) & 0x20000) == 0 )
      {
        if( DriverObject )
        {
          IoAddTriageDumpDataBlock(DriverObject, (unsigned int)DriverObject->Size);
          if( DriverObject->DriverName.Length )
          {
            IoAddTriageDumpDataBlock(&DriverObject->DriverName, 2ui64);
            IoAddTriageDumpDataBlock(DriverObject->DriverName.Buffer, DriverObject->DriverName.Length);
          }
        }
        IoAddTriageDumpDataBlock(DeviceObject, *((unsigned __int16 *)DeviceObject + 1));
        v11 = (__int16 *)*((_QWORD *)DeviceObject + 1);
        if( v11 )
        {
          IoAddTriageDumpDataBlock(v11, (unsigned int)v11[1]);
          v12 = (_WORD *)(*((_QWORD *)DeviceObject + 1) + 56i64);
          if( *v12 )
          {
            IoAddTriageDumpDataBlock(v12, 2ui64);
            IoAddTriageDumpDataBlock(
              *(PVOID *)(*((_QWORD *)DeviceObject + 1) + 64i64),
              *(unsigned __int16 *)(*((_QWORD *)DeviceObject + 1) + 56i64));
          }
        }
        v13 = *(PVOID **)(*((_QWORD *)DeviceObject + 39) + 40i64);
        if( v13 )
        {
          v14 = v13 + 5;
          IoAddTriageDumpDataBlock(v13, 0x310ui64);
          if( *(_WORD *)v14 )
          {
            IoAddTriageDumpDataBlock(v14, 2ui64);
            IoAddTriageDumpDataBlock(v14[1], *(unsigned __int16 *)v14);
          }
          v15 = *((_QWORD *)DeviceObject + 39);
          v16 = (_WORD *)(*(_QWORD *)(v15 + 40) + 56i64);
          if( *v16 )
          {
            IoAddTriageDumpDataBlock(v16, 2ui64);
            IoAddTriageDumpDataBlock(
              *(PVOID *)(*(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64) + 64i64),
              *(unsigned __int16 *)(*(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64) + 56i64));
            v15 = *((_QWORD *)DeviceObject + 39);
          }
          v17 = *(_QWORD *)(*(_QWORD *)(v15 + 40) + 16i64);
          if( v17 )
          {
            v18 = (_WORD *)(v17 + 56);
            if( *v18 )
            {
              IoAddTriageDumpDataBlock(v18, 2ui64);
              v19 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)DeviceObject + 39) + 40i64) + 16i64);
              IoAddTriageDumpDataBlock(*(PVOID *)(v19 + 64), *(unsigned __int16 *)(v19 + 56));
            }
          }
        }
        KeBugCheckEx(0xCAu, 2ui64, (ULONG_PTR)DeviceObject, (ULONG_PTR)DriverObject, 0i64);
      }
    }
  }
  return IoReportResourceUsageInternal(
           ArbiterRequestLegacyReported,
           DriverObject,
           (CM_RESOURCE_LIST *)DriverObject,
           (DEVICE_OBJECT *)DriverList,
           BugCheckParameter4,
           (UINT8 *)DeviceObject);
}

Referenced by:

No references.