IoReportResourceForDetection

NTSTATUS __stdcall IoReportResourceForDetection(
        _DRIVER_OBJECT *DriverObject,
        _CM_RESOURCE_LIST *DriverList,
        UINT64 DriverListSize,
        _DEVICE_OBJECT *DeviceObject,
        _CM_RESOURCE_LIST *DeviceList,
        UINT64 DeviceListSize,
        UINT8 *ConflictDetected,
        UINT64 a8){
  _DWORD *DeviceNode; 
  _DRIVER_OBJECT *v11; 
  _UNICODE_STRING *p_DriverName; 
  VOID **v13; 
  VOID **v14; 
  _DEVOBJ_EXTENSION *DeviceObjectExtension; 
  _WORD *v16; 
  __int64 v17; 
  _WORD *v18; 
  __int64 v19; 
  PVOID BugCheckParameter4; 
  UINT64 v22; 
  UINT8 v23; 

  if( DeviceObject )
  {
    DeviceNode = DeviceObject->DeviceObjectExtension->DeviceNode;
    if( DeviceNode )
    {
      if( (DeviceNode[99] & 0x20000) == 0 )
      {
        if( DriverObject )
        {
          IoAddTriageDumpDataBlock(DriverObject, (_BYTE *)(unsigned int)DriverObject->Size);
          if( DriverObject->DriverName.Length )
          {
            IoAddTriageDumpDataBlock(&DriverObject->DriverName, (_BYTE *)2);
            IoAddTriageDumpDataBlock(DriverObject->DriverName.Buffer, (_BYTE *)DriverObject->DriverName.Length);
          }
        }
        IoAddTriageDumpDataBlock(DeviceObject, (_BYTE *)DeviceObject->Size);
        v11 = DeviceObject->DriverObject;
        if( v11 )
        {
          IoAddTriageDumpDataBlock(v11, (_BYTE *)(unsigned int)v11->Size);
          p_DriverName = &DeviceObject->DriverObject->DriverName;
          if( p_DriverName->Length )
          {
            IoAddTriageDumpDataBlock(p_DriverName, (_BYTE *)2);
            IoAddTriageDumpDataBlock(
              DeviceObject->DriverObject->DriverName.Buffer,
              (_BYTE *)DeviceObject->DriverObject->DriverName.Length);
          }
        }
        v13 = (VOID **)DeviceObject->DeviceObjectExtension->DeviceNode;
        if( v13 )
        {
          v14 = v13 + 5;
          IoAddTriageDumpDataBlock(v13, (_BYTE *)0x310);
          if( *(_WORD *)v14 )
          {
            IoAddTriageDumpDataBlock(v14, (_BYTE *)2);
            IoAddTriageDumpDataBlock(v14[1], (_BYTE *)*(unsigned __int16 *)v14);
          }
          DeviceObjectExtension = DeviceObject->DeviceObjectExtension;
          v16 = (char *)DeviceObjectExtension->DeviceNode + 56;
          if( *v16 )
          {
            IoAddTriageDumpDataBlock(v16, (_BYTE *)2);
            IoAddTriageDumpDataBlock(
              *((VOID **)DeviceObject->DeviceObjectExtension->DeviceNode + 8),
              (_BYTE *)*((unsigned __int16 *)DeviceObject->DeviceObjectExtension->DeviceNode + 28));
            DeviceObjectExtension = DeviceObject->DeviceObjectExtension;
          }
          v17 = *((_QWORD *)DeviceObjectExtension->DeviceNode + 2);
          if( v17 )
          {
            v18 = (_WORD *)(v17 + 56);
            if( *v18 )
            {
              IoAddTriageDumpDataBlock(v18, (_BYTE *)2);
              v19 = *((_QWORD *)DeviceObject->DeviceObjectExtension->DeviceNode + 2);
              IoAddTriageDumpDataBlock(*(VOID **)(v19 + 64), (_BYTE *)*(unsigned __int16 *)(v19 + 56));
            }
          }
        }
        KeBugCheckEx(0xCAu, (PVOID)2, DeviceObject, DriverObject, 0i64);
      }
    }
  }
  return IoReportResourceUsageInternal(
           ArbiterRequestPnpDetected,
           (_UNICODE_STRING *)DriverList,
           DriverObject,
           DriverList,
           (UINT64)BugCheckParameter4,
           DeviceObject,
           DeviceList,
           v22,
           v23,
           ConflictDetected);
}

Referenced by:

No references.