IoAssignResources

NTSTATUS __stdcall IoAssignResources(
        _UNICODE_STRING *RegistryPath,
        _UNICODE_STRING *DriverClassName,
        _DRIVER_OBJECT *DriverObject,
        _DEVICE_OBJECT *DeviceObject,
        _IO_RESOURCE_REQUIREMENTS_LIST *RequestedResources,
        _CM_RESOURCE_LIST **pAllocatedResources){
  _DWORD *DeviceNode; 
  _DRIVER_OBJECT *v9; 
  _UNICODE_STRING *p_DriverName; 
  VOID **v11; 
  VOID **v12; 
  _DEVOBJ_EXTENSION *DeviceObjectExtension; 
  _WORD *v14; 
  __int64 v15; 
  _WORD *v16; 
  __int64 v17; 
  _IO_RESOURCE_REQUIREMENTS_LIST *v18; 

  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);
        v9 = DeviceObject->DriverObject;
        if( v9 )
        {
          IoAddTriageDumpDataBlock(v9, (_BYTE *)(unsigned int)v9->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);
          }
        }
        v11 = (VOID **)DeviceObject->DeviceObjectExtension->DeviceNode;
        if( v11 )
        {
          v12 = v11 + 5;
          IoAddTriageDumpDataBlock(v11, (_BYTE *)0x310);
          if( *(_WORD *)v12 )
          {
            IoAddTriageDumpDataBlock(v12, (_BYTE *)2);
            IoAddTriageDumpDataBlock(v12[1], (_BYTE *)*(unsigned __int16 *)v12);
          }
          DeviceObjectExtension = DeviceObject->DeviceObjectExtension;
          v14 = (char *)DeviceObjectExtension->DeviceNode + 56;
          if( *v14 )
          {
            IoAddTriageDumpDataBlock(v14, (_BYTE *)2);
            IoAddTriageDumpDataBlock(
              *((VOID **)DeviceObject->DeviceObjectExtension->DeviceNode + 8),
              (_BYTE *)*((unsigned __int16 *)DeviceObject->DeviceObjectExtension->DeviceNode + 28));
            DeviceObjectExtension = DeviceObject->DeviceObjectExtension;
          }
          v15 = *((_QWORD *)DeviceObjectExtension->DeviceNode + 2);
          if( v15 )
          {
            v16 = (_WORD *)(v15 + 56);
            if( *v16 )
            {
              IoAddTriageDumpDataBlock(v16, (_BYTE *)2);
              v17 = *((_QWORD *)DeviceObject->DeviceObjectExtension->DeviceNode + 2);
              IoAddTriageDumpDataBlock(*(VOID **)(v17 + 64), (_BYTE *)*(unsigned __int16 *)(v17 + 56));
            }
          }
        }
        KeBugCheckEx(0xCAu, (PVOID)2, DeviceObject, DriverObject, 0i64);
      }
    }
  }
  v18 = RequestedResources;
  if( RequestedResources && (!RequestedResources->AlternativeLists || !RequestedResources->List[0].Count) )
    v18 = 0i64;
  if( pAllocatedResources )
    *pAllocatedResources = 0i64;
  return IopLegacyResourceAllocation(ArbiterRequestLegacyAssigned, DriverObject, DeviceObject, v18, pAllocatedResources);
}

Referenced by:

No references.