Existe algo especialmente satisfatório em conectar um dispositivo USB a um computador com Windows e vê-lo aparecer quase imediatamente. O Windows identifica o hardware, carrega o driver adequado, atribui uma letra de unidade ao dispositivo de armazenamento e, em um ou dois segundos, a unidade USB está pronta para uso.
A maioria dos usuários nunca precisa pensar no que aconteceu durante esses poucos segundos. Para desenvolvedores, administradores de TI, engenheiros de hardware e qualquer pessoa que esteja criando software para interagir com dispositivos USB, porém, esse processo automático levanta uma pergunta importante: de onde o Windows obtém as informações usadas para identificar o dispositivo?
Uma unidade flash USB pode informar mais de uma identidade. No nível USB, o dispositivo informa um Vendor ID, normalmente chamado de VID, e um Product ID, normalmente chamado de PID. Depois que o Windows reconhece o dispositivo como armazenamento em massa USB, o dispositivo de armazenamento também pode informar uma sequência de texto SCSI Vendor, uma sequência SCSI Product e uma revisão do produto.
Esses valores estão relacionados porque descrevem o mesmo dispositivo físico, mas não vêm do mesmo lugar. Eles não são intercambiáveis e nem sempre identificam o mesmo fabricante ou o mesmo nome de produto.
O Windows 10 oferece várias maneiras de visualizar ou recuperar essas informações. Alguns métodos foram desenvolvidos para uma pessoa sentada em frente ao computador. Outros são mais adequados para scripts, sistemas de inventário, softwares de diagnóstico ou aplicativos que precisam identificar automaticamente dispositivos de armazenamento USB.
VID e PID USB em Comparação com Fabricante e Produto SCSI
Antes de analisar os diferentes métodos disponíveis no Windows, é útil compreender as duas identidades envolvidas.
O Vendor ID e o Product ID USB vêm dos descritores USB do dispositivo. Esses valores são informados quando o dispositivo USB é conectado pela primeira vez e o Windows inicia o processo de enumeração USB.
Um identificador típico de hardware USB pode ter esta aparência:
USB\VID_090C&PID_1000&REV_1100
USB\VID_090C&PID_1000
Neste exemplo, os valores são:
USB VID = 090C
USB PID = 1000
O VID tem a finalidade de identificar o fornecedor USB, enquanto o PID identifica um produto ou uma família de produtos atribuída por esse fornecedor. Ambos os valores são números hexadecimais.
Depois que o Windows determina que o dispositivo conectado é um dispositivo USB Mass Storage, ele passa a se comunicar com o dispositivo por meio da camada de comandos de armazenamento. Uma resposta padrão de SCSI Inquiry pode incluir uma sequência Vendor, uma sequência Product e uma sequência Revision.
Um identificador de hardware de armazenamento pode ter esta aparência:
USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07
Neste exemplo, os valores são:
SCSI Vendor = Generic
SCSI Product = Flash Disk
SCSI Revision = 8.07
O VID e o PID USB são identificadores numéricos utilizados durante a enumeração USB. Os campos SCSI Vendor e Product são sequências de texto informadas por meio da interface de armazenamento. Um fabricante pode alterar uma dessas identidades sem necessariamente alterar a outra.
É por isso que uma unidade flash pode informar um VID USB associado ao fabricante do controlador, enquanto o campo SCSI Product exibe um nome comercial, o nome de um cliente ou algo genérico, como “USB Flash Disk”.
Como o Windows Monta as Duas Identidades do Dispositivo
A maneira mais simples de visualizar o processo é dividi-lo em duas etapas. Primeiro, o Windows identifica o hardware USB conectado. Em seguida, identifica o dispositivo de armazenamento que opera por meio daquela conexão USB.
O VID e o PID USB ficam disponíveis durante a primeira etapa. Os campos SCSI Vendor, Product e Revision ficam disponíveis depois que o driver de armazenamento em massa USB é carregado e o Windows consulta o dispositivo de armazenamento.
Essa diferença também ajuda a explicar por que o Windows consegue se lembrar de um dispositivo USB depois que ele foi desconectado. Conforme discutido em nosso artigo sobre por que o Windows mantém um histórico de dispositivos USB conectados anteriormente, o Windows armazena as informações coletadas durante a enumeração do dispositivo para que possa reconhecer e gerenciar o hardware na próxima vez em que ele aparecer.
Por Que Alguém Precisaria dos Dois Conjuntos de Informações?
Para uma solução de problemas simples, o VID e o PID USB podem ser suficientes. Para inventário de dispositivos, fabricação, diagnóstico ou desenvolvimento de software, coletar as duas identidades oferece uma visão mais completa.
Um aplicativo de inventário pode usar o VID e o PID USB para agrupar dispositivos por plataforma de hardware, enquanto exibe ao usuário as sequências SCSI Vendor e Product. Um utilitário de fabricação pode confirmar que um controlador USB compatível está conectado antes de executar uma operação. Um programa de diagnóstico pode registrar todos os identificadores para que os resultados de diferentes dispositivos possam ser comparados posteriormente.
Ferramentas de perícia digital podem coletar os identificadores como parte do registro de um dispositivo. Um software de validação USB pode comparar a identidade informada pelo dispositivo com o comportamento observado durante os testes. Isso pode ser útil porque o nome, a capacidade e o desempenho declarados por um dispositivo USB não comprovam necessariamente qual hardware está realmente dentro dele.
O mesmo princípio se aplica à integridade dos dados. As informações de identificação nos dizem o que o dispositivo afirma ser, enquanto os testes nos mostram como ele realmente se comporta. Nosso artigo que explica por que a verificação de dados USB às vezes deve incluir um ciclo de energia analisa uma diferença semelhante entre as informações informadas imediatamente e aquelas comprovadas depois que o dispositivo é desconectado e reconectado.
Método 1: Usar o Gerenciador de Dispositivos do Windows
O Gerenciador de Dispositivos é o lugar mais fácil para começar, pois não exige linha de comando, scripts ou programação. O detalhe importante é que a identidade USB e a identidade de armazenamento normalmente aparecem em duas entradas diferentes do dispositivo.
Encontrar o VID e o PID USB
Abra o Gerenciador de Dispositivos e expanda a seção chamada Controladores USB (barramento serial universal). Localize o dispositivo USB Mass Storage associado à unidade, clique nele com o botão direito do mouse e selecione Propriedades.
Selecione a guia Detalhes e escolha IDs de Hardware na lista suspensa Propriedade.
Gerenciador de Dispositivos
→ Controladores USB (barramento serial universal)
→ Dispositivo de Armazenamento em Massa USB
→ Propriedades
→ Detalhes
→ IDs de Hardware
Um resultado típico pode ter esta aparência:
USB\VID_090C&PID_1000&REV_1100
USB\VID_090C&PID_1000
Os quatro caracteres que aparecem depois de VID_ representam o Vendor ID USB. Os quatro caracteres que aparecem depois de PID_ representam o Product ID USB.
Encontrar o Fabricante e o Produto SCSI
Volte ao Gerenciador de Dispositivos e expanda Unidades de disco. Localize a unidade flash USB, clique nela com o botão direito do mouse e selecione Propriedades. Mais uma vez, abra a guia Detalhes e selecione IDs de Hardware.
Gerenciador de Dispositivos
→ Unidades de disco
→ Unidade flash USB
→ Propriedades
→ Detalhes
→ IDs de Hardware
O resultado pode ser semelhante a este:
USBSTOR\Disk&Ven_Generic&Prod_Flash_Disk&Rev_8.07
O Windows formatou os valores em um identificador de hardware Plug and Play:
Ven_Generic = SCSI Vendor
Prod_Flash_Disk = SCSI Product
Rev_8.07 = SCSI Revision
O Gerenciador de Dispositivos é uma excelente escolha para inspecionar manualmente um único dispositivo. Sua limitação é que associar a entrada USB Mass Storage correta à entrada Disk Drive correspondente pode se tornar confuso quando várias unidades USB estão conectadas ao mesmo tempo.
Método 2: Usar o PowerShell
O PowerShell é uma escolha melhor quando as informações precisam ser coletadas repetidamente, exibidas em um relatório ou recuperadas de mais de um computador. O Windows 10 inclui o PowerShell e os cmdlets Plug and Play necessários para uma inspeção básica dos dispositivos.
Listar Dispositivos USB Presentes que Contenham VID e PID
Abra o PowerShell e execute o seguinte comando:
Get-PnpDevice -PresentOnly |
Where-Object {
$_.InstanceId -match '^USB\\VID_'
} |
Select-Object FriendlyName, Class, InstanceId
A saída incluirá IDs de instância de dispositivo semelhantes a este:
USB\VID_090C&PID_1000\1234567890
O próximo exemplo extrai o VID e o PID em colunas separadas:
Get-PnpDevice -PresentOnly |
Where-Object {
$_.InstanceId -match '^USB\\VID_'
} |
ForEach-Object {
if ($_.InstanceId -match 'VID_([0-9A-F]{4})&PID_([0-9A-F]{4})') {
[PSCustomObject]@{
DeviceName = $_.FriendlyName
VID = $matches[1]
PID = $matches[2]
InstanceId = $_.InstanceId
}
}
}
Isso é útil porque transforma uma longa sequência de instância de dispositivo do Windows em um resultado mais limpo, contendo o nome do dispositivo, o VID e o PID.
Listar Informações de Armazenamento USB
O comando PowerShell a seguir consulta a classe de unidades de disco do Windows e filtra os resultados para mostrar dispositivos de armazenamento USB:
Get-CimInstance Win32_DiskDrive |
Where-Object {
$_.InterfaceType -eq 'USB' -or
$_.PNPDeviceID -like 'USBSTOR*'
} |
Select-Object DeviceID,
Manufacturer,
Model,
FirmwareRevision,
PNPDeviceID
Um resultado pode ter esta aparência:
DeviceID : \\.\PHYSICALDRIVE2
Manufacturer : Generic
Model : Flash Disk USB Device
FirmwareRevision: 8.07
PNPDeviceID : USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07...
Os campos Manufacturer e Model podem ser convenientes, mas não são preenchidos de maneira consistente por todos os dispositivos de armazenamento USB. O campo PNPDeviceID muitas vezes apresenta a representação mais clara dos valores Vendor, Product e Revision recebidos pelo Windows.
O PowerShell é uma das melhores opções de uso geral porque não exige um aplicativo compilado. A parte mais difícil é correlacionar uma entrada de dispositivo no nível USB com o disco físico correspondente quando vários dispositivos estão conectados. Um script mais avançado pode seguir os relacionamentos entre dispositivos pai e filho no Windows para realizar essa associação.
Método 3: Usar WMI ou o Comando WMIC
O Windows Management Instrumentation, normalmente abreviado como WMI, é utilizado há muitos anos para recuperar informações de hardware e do sistema operacional. Muitos computadores com Windows 10 também incluem o utilitário de linha de comando mais antigo, chamado WMIC.
O WMIC é útil para testes rápidos e para manter scripts mais antigos, embora o PowerShell e o CIM sejam, em geral, as melhores escolhas para novos desenvolvimentos.
Exibir Informações de Discos USB com o WMIC
Abra o Prompt de Comando e execute:
wmic diskdrive get DeviceID,InterfaceType,Manufacturer,Model,FirmwareRevision,PNPDeviceID
Para limitar o resultado às unidades de disco que utilizam uma interface USB, execute:
wmic diskdrive where "InterfaceType='USB'" get DeviceID,Manufacturer,Model,FirmwareRevision,PNPDeviceID
Um resultado típico pode ser semelhante a este:
DeviceID Manufacturer Model FirmwareRevision
\\.\PHYSICALDRIVE2 Generic Flash Disk USB Device 8.07
A coluna PNPDeviceID pode conter um valor mais longo:
USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07\...
Pesquisar Entradas Plug and Play por Valores de VID e PID USB
O comando WMIC a seguir pesquisa nos dispositivos Plug and Play entradas que contenham um VID USB:
wmic path Win32_PnPEntity where "PNPDeviceID like 'USB%%VID_%%'" get Name,PNPDeviceID
Os sinais de porcentagem duplicados são utilizados pelo WMIC como caracteres curinga dentro da consulta.
O WMIC pode não estar presente ou ativado em todas as instalações mais recentes do Windows, e a Microsoft vem direcionando os scripts administrativos para o PowerShell. Para um utilitário do Windows 10 ou um script corporativo já existente, porém, o WMI ainda pode fornecer informações úteis.
Método 4: Usar a SetupAPI do Windows
Softwares escritos em C ou C++ podem recuperar informações de dispositivos Plug and Play do Windows por meio da SetupAPI. Essa é uma abordagem prática para aplicativos de desktop que precisam descobrir automaticamente dispositivos USB, em vez de exigir que o usuário procure manualmente no Gerenciador de Dispositivos.
Um aplicativo SetupAPI completo inclui tratamento de erros, buffers dinâmicos, análise das propriedades do dispositivo e limpeza dos recursos. O exemplo abreviado a seguir mostra as principais chamadas do Windows envolvidas.
Criar um Conjunto de Informações de Dispositivos
#include <windows.h>
#include <setupapi.h>
HDEVINFO deviceInfoSet = SetupDiGetClassDevsW(
nullptr,
L"USB",
nullptr,
DIGCF_ALLCLASSES | DIGCF_PRESENT
);
Isso cria um conjunto de informações de dispositivos contendo os dispositivos USB atualmente presentes no computador.
Enumerar as Entradas de Dispositivos
SP_DEVINFO_DATA deviceInfoData{};
deviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
for (
DWORD index = 0;
SetupDiEnumDeviceInfo(
deviceInfoSet,
index,
&deviceInfoData
);
++index
) {
// Recupere aqui as propriedades do dispositivo.
}
Ler a Propriedade do ID de Hardware
WCHAR hardwareIds[4096]{};
DWORD requiredSize = 0;
if (SetupDiGetDeviceRegistryPropertyW(
deviceInfoSet,
&deviceInfoData,
SPDRP_HARDWAREID,
nullptr,
reinterpret_cast<PBYTE>(hardwareIds),
sizeof(hardwareIds),
&requiredSize
)) {
// Pesquise em hardwareIds por:
// VID_xxxx
// PID_xxxx
}
A propriedade de ID de hardware retornada pode conter uma ou mais sequências separadas por caracteres nulos. Uma entrada de dispositivo USB pode conter um identificador como este:
USB\VID_090C&PID_1000&REV_1100
O aplicativo pode pesquisar essa sequência pelos campos VID_ e PID_ e extrair os quatro caracteres hexadecimais que aparecem em seguida.
Quando o processo estiver concluído, o conjunto de informações de dispositivos deverá ser liberado:
SetupDiDestroyDeviceInfoList(deviceInfoSet);
A SetupAPI é poderosa, mas existe um detalhe importante: o Windows representa o dispositivo USB e o disco físico como nós separados na árvore de dispositivos. Recuperar o VID e o PID USB é relativamente direto. Associar esses valores ao disco correto, à letra de unidade e à identidade SCSI pode exigir percorrer os relacionamentos entre dispositivos pai e filho.
Esse é um dos motivos pelos quais um aplicativo comercial de diagnóstico normalmente exige mais código do que uma breve demonstração pode sugerir. As propriedades individuais estão disponíveis, mas o verdadeiro trabalho está em reunir corretamente todas as informações em um único registro de dispositivo.
Método 5: Consultar Diretamente o Dispositivo de Armazenamento
Um aplicativo do Windows pode consultar um disco físico abrindo o dispositivo e enviando uma solicitação IOCTL_STORAGE_QUERY_PROPERTY. Esse método é útil para recuperar informações de armazenamento, como Vendor, Product, Revision, número de série e tipo de barramento.
O exemplo abaixo abre o PhysicalDrive2. O número real da unidade física dependerá do computador e do dispositivo USB que estiver sendo inspecionado.
Abrir a Unidade Física
HANDLE drive = CreateFileW(
L"\\\\.\\PhysicalDrive2",
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr,
OPEN_EXISTING,
0,
nullptr
);
if (drive == INVALID_HANDLE_VALUE) {
// Trate o erro.
}
Preparar a Consulta de Armazenamento
STORAGE_PROPERTY_QUERY query{};
query.PropertyId = StorageDeviceProperty;
query.QueryType = PropertyStandardQuery;
Enviar a Consulta ao Windows
BYTE buffer[4096]{};
DWORD bytesReturned = 0;
BOOL result = DeviceIoControl(
drive,
IOCTL_STORAGE_QUERY_PROPERTY,
&query,
sizeof(query),
buffer,
sizeof(buffer),
&bytesReturned,
nullptr
);
Interpretar o Descritor de Armazenamento Retornado
if (result) {
auto descriptor =
reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(buffer);
const char* vendor =
descriptor->VendorIdOffset
? reinterpret_cast<const char*>(
buffer + descriptor->VendorIdOffset
)
: "";
const char* product =
descriptor->ProductIdOffset
? reinterpret_cast<const char*>(
buffer + descriptor->ProductIdOffset
)
: "";
const char* revision =
descriptor->ProductRevisionOffset
? reinterpret_cast<const char*>(
buffer + descriptor->ProductRevisionOffset
)
: "";
const char* serial =
descriptor->SerialNumberOffset
? reinterpret_cast<const char*>(
buffer + descriptor->SerialNumberOffset
)
: "";
}
As sequências não são armazenadas diretamente dentro da parte fixa da estrutura. Em vez disso, a estrutura fornece deslocamentos em bytes que apontam para as localizações dessas sequências dentro do buffer retornado.
Quando terminar de utilizar o identificador da unidade física, feche-o:
CloseHandle(drive);
Uma consulta de armazenamento bem-sucedida pode fornecer informações semelhantes a estas:
Vendor = Generic
Product = Flash Disk
Revision = 8.07
Serial = 1234567890
Bus Type = USB
Esse método está mais próximo do dispositivo de armazenamento do que a leitura de um nome amigável no Gerenciador de Dispositivos ou a consulta de um valor armazenado em cache no Registro. No entanto, ele não retorna automaticamente o VID e o PID USB. O aplicativo ainda precisa correlacionar o disco físico ao dispositivo USB pai e recuperar separadamente o identificador de hardware USB, normalmente por meio da SetupAPI ou das funções do Windows Configuration Manager.
Qual Método do Windows Você Deve Usar?
Não existe um único método que seja o melhor para todas as situações. A escolha correta depende de o objetivo ser uma inspeção manual, a criação de scripts, o desenvolvimento de software ou uma análise de baixo nível do dispositivo.
Abrir a Comparação dos Métodos de Identificação USB no Windows
| Método | VID/PID USB | Fabricante/Produto SCSI | Exige Programação | Melhor Uso |
|---|---|---|---|---|
| Gerenciador de Dispositivos | Sim | Sim | Não | Inspecionar manualmente um dispositivo |
| PowerShell | Sim | Sim | Scripts simples | Inventário e relatórios repetíveis |
| WMI ou WMIC | Sim | Sim | Scripts simples | Sistemas mais antigos e scripts existentes |
| SetupAPI | Sim | Por meio da correlação de dispositivos | Sim | Aplicativos do Windows e utilitários USB |
| Consulta de Armazenamento | Não diretamente | Sim | Sim | Diagnóstico e informações diretas de armazenamento |
Para uma pessoa que deseja verificar uma única unidade USB, o Gerenciador de Dispositivos normalmente é suficiente. Para administradores que coletam informações de muitos computadores, o PowerShell provavelmente é o melhor ponto de partida. Para desenvolvedores que estão criando um utilitário do Windows, a SetupAPI combinada com uma consulta de propriedades de armazenamento oferece a abordagem mais completa.
O Registro do Windows é Outro Método?
O Windows armazena informações de enumeração USB no Registro, e é possível localizar ali tanto as entradas USB quanto as entradas de armazenamento USB.
As entradas de dispositivos USB normalmente são encontradas em:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
As entradas de armazenamento USB normalmente são encontradas em:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USBSTOR
Esses locais são úteis para solução de problemas e análise histórica, mas o Registro não deve ser confundido com a fonte original das informações. O Windows cria e atualiza essas entradas depois que já enumerou o dispositivo USB e consultou a interface de armazenamento.
O VID e o PID USB originais vêm dos descritores USB. Os valores originais de Vendor, Product e Revision do armazenamento vêm da resposta Inquiry do dispositivo de armazenamento. O Registro é o local onde o Windows grava os resultados para uso posterior.
As permissões do Registro também podem tornar o acesso direto inconveniente para um software. Quando um aplicativo precisa apenas de informações sobre os dispositivos atualmente conectados, as APIs de dispositivos compatíveis do Windows normalmente são uma escolha melhor.
Por Que os Nomes USB e SCSI Podem Não Coincidir
É comum esperar que todos os identificadores exibam o mesmo nome de fabricante. Na prática, unidades flash USB são construídas a partir de várias camadas de hardware e firmware, e cada camada pode informar algo diferente.
Uma empresa que vende unidades flash no varejo pode adquirir o controlador de outro fabricante. O VID USB pode identificar o fornecedor do controlador ou a empresa responsável pelo firmware, enquanto o campo SCSI Product pode conter o nome da marca comercial. Em outros casos, as sequências SCSI permanecem completamente genéricas.
Um dispositivo pode informar:
USB VID = 090C
USB PID = 1000
SCSI Vendor = Generic
SCSI Product = Flash Disk
Outra unidade pode informar:
USB VID = 0951
USB PID = 1666
SCSI Vendor = Kingston
SCSI Product = DataTraveler 3.0
Nenhum desses formatos comprova automaticamente que o produto é genuíno. Esses identificadores são úteis para identificação e correlação, mas são valores informados pelo firmware. Um dispositivo suficientemente modificado ou falsificado pode informar quaisquer valores que tenham sido programados nele.
Essa é uma diferença importante para desenvolvedores que estão criando softwares de validação de dispositivos. Os valores de identificação devem ser registrados, mas não devem substituir testes de capacidade, verificação de gravação e leitura, testes de desempenho ou outras formas de análise comportamental.
Um Registro Prático de Dispositivo
Para softwares que fazem inventário ou testam unidades flash USB, um registro útil do dispositivo pode incluir mais de quatro campos.
USB VID
USB PID
USB Revision
USB Serial Number
SCSI Vendor
SCSI Product
SCSI Revision
Storage Serial Number
Physical Drive Number
Drive Letter
Reported Capacity
Bus Type
Connection Speed
Nem toda unidade USB fornecerá todos os valores. Os números de série podem estar ausentes, duplicados ou ser informados de maneira diferente nos níveis USB e de armazenamento. As sequências de fabricante podem estar vazias. Os nomes dos produtos podem ser genéricos. O software deve estar preparado para informações incompletas, em vez de presumir que todos os campos estarão sempre disponíveis.
A abordagem mais sólida é coletar os identificadores disponíveis, preservar os valores originais e, em seguida, associar esses valores aos resultados de desempenho, capacidade ou verificação produzidos pelo aplicativo.
Uma Última Observação Antes de Você Ir
O Windows 10 oferece várias maneiras confiáveis de encontrar as informações de VID, PID, SCSI Vendor e SCSI Product de uma unidade USB. O Gerenciador de Dispositivos fornece uma resposta manual rápida. O PowerShell e o WMI oferecem acesso programável por meio de scripts. A SetupAPI permite que aplicativos do Windows acessem a árvore de dispositivos Plug and Play, enquanto uma consulta direta de propriedades de armazenamento recupera informações associadas ao disco físico.
A lição importante é que um dispositivo de armazenamento USB possui mais de uma identidade. O VID e o PID USB vêm da camada de enumeração USB. Os valores SCSI Vendor, Product e Revision vêm da camada de armazenamento. Consultar apenas um desses locais pode fornecer somente metade das informações.
Depois que essa diferença é compreendida, os nomes aparentemente conflitantes exibidos pelo Windows começam a fazer sentido. O dispositivo não está necessariamente mudando de identidade. O Windows está simplesmente mostrando informações coletadas de duas partes diferentes do mesmo hardware.
Nota editorial: Este artigo é baseado em trabalhos práticos de enumeração de dispositivos USB e identificação de armazenamento realizados em sistemas Windows. A saída exata pode variar de acordo com o controlador USB, o firmware, o driver do Windows e a implementação do dispositivo de armazenamento. A imagem foi criada para facilitar o consumo das informações com o auxílio de ferramentas de criação de imagens baseadas em inteligência artificial.