Como o Windows informa se uma unidade conectada ao PC é uma unidade de disco rígido, uma unidade de estado sólido ou uma unidade de disco flash?

2

Alguém pode explicar tecnicamente como o Windows identifica o tipo de unidade conectada ao computador?

Estou fazendo essa pergunta porque estou prestes a criar um programa que só gravará dados em um tipo específico de unidade de armazenamento ... e estou curioso para saber como isso acontece nos bastidores.

ducktapes
fonte
Deseja saber como o Windows obtém o tipo de unidade ou deseja saber como você (programa r) pode detectar o tipo de unidade?
Werner Henze #
Só queria saber como o Windows faz tecnicamente toda a identificação de disco.
ducktapes

Respostas:

2

Você pode obter essas informações de dois lugares: wmic diskdrive e wmic logicdrive - (e, é claro, suas ligações wmi para equivalentes).

A saída do wmic diskdrive - observe as descrições de capacidade e o tipo de mídia

Capacidades disponibilidade BytesPerSector CapabilityDescriptions Caption CompressionMethod ConfigManagerErrorCode ConfigManagerUserConfig CreationClassName DefaultBlockSize Descrição DeviceID ErrorCleared ErrorDescription ErrorMethodology FirmwareRevision Índice InstallDate InterfaceType LastErrorCode Fabricante MaxBlockSize MaxMediaSize MediaLoaded MediaType MinBlockSize Modelo Nome NeedsCleaning NumberOfMediaSupported partições PNPDeviceID PowerManagementCapabilities PowerManagementSupported SCSIBUS SCSILogicalUnit SCSIPort SCSITargetId SectorsPerTrack SerialNumber Assinatura Tamanho Estado StatusInfo SystemCreationClassNameSystemName TotalCylinders TotalHeads TotalSectors TotalTracks TracksPerCylinder  
              512 {3, 4} {"Acesso aleatório", "Suporta gravação"} Hitachi HDS723030ALA640 0 FALSO Unidade de disco Win32_DiskDrive \\. \ PHYSICALDRIVE0 MKAO 0 IDE (unidades de disco padrão) VERDADEIRO Mídia de disco rígido fixa Hitachi HDS723030ALA640 \\. \ PHYSICALDRIVE0 1 IDE \ DISKHITACHI_HDS723030ALA640 _________________ MKAOAA10 \ 4 & 15828421 & 0 & 0.0.0 0 0 0 0 63 KM3010HYNKXXGW 3000590369280 OK Win32_ComputerSystem NYX 364801 255 5860528065 93024255 255                
                                                                                   HTC Android Phone Dispositivo USB 0 FALSO Unidade de disco Win32_DiskDrive \\. \ PHYSICALDRIVE4 0000 4 USB (unidades de disco padrão) TRUE HTC Android Phone Dispositivo USB \\. \ PHYSICALDRIVE4 0 USBSTOR \ DISK & VEN_HTC & PROD_ANDROID_PHONE & REV_0000 \ HT24YTV03821 &0 0 0 0 0 HT24YTV03820 0 OK Win32_ComputerSystem NYX                                                                                   
              512 {3, 4} {"Acesso aleatório", "Suporta gravação"} Samsung SSD 840 Series 0 FALSE Win32_DiskDrive Unidade de disco \\. \ PHYSICALDRIVE1 DXT0 1 IDE (unidades de disco padrão) TRUE Mídia fixa de disco rígido Samsung SSD 840 Series \\ . \ PHYSICALDRIVE1 2 IDE \ DISKSAMSUNG_SSD_840_SERIES __________________ DXT08B0Q \ 4 & 15828421 & 0 & 0.1.0 0 0 0 1 63 1SG4ENCA4A8251 J 3142097946 250056737280 OK Win32_ComputerSystem NYX 30401 255 488392065 7752255 255                
              512 {3, 4} {"Acesso aleatório", "Suporta gravação"} ST92503010AS 0 FALSO Unidade de disco Win32_DiskDrive \\. \ PHYSICALDRIVE3 0005 3 IDE (unidades de disco padrão) TRUE Mídia fixa de disco rígido ST92503010AS \\. \ PHYSICALDRIVE3 1 IDE \ DISKST92503010AS ____________________________ 0005LVM1 \ 4 & 15828421 & 0 & 0,3.0 0 0 0 3 63 Y50HBBJ8 1668369528 250056737280 OK Win32_ComputerSystem NYX 30401 255 488392065 7752255 255                
              512 {3, 4} {"Acesso aleatório", "Suporta gravação"} FUJITSU MHW2040BH 0 FALSO Win32_DiskDrive Unidade de disco \\. \ PHYSICALDRIVE2 0000 2 IDE (unidades de disco padrão) VERDADEIRO Mídia fixa de disco rígido FUJITSU MHW2040BH \\. \ PHYSICALDRIVE2 2 IDE \ DISKFUJITSU_MHW2040BH _______________________ 0000001C \ 4 & 15828421 & 0 & 0.2.0 0 0 0 2 63 1KX07T2B57FL 976588 40007761920 OK Win32_ComputerSystem NYX 4864 255 78140160 1240320 255                
                                                                                   HTC Android Phone Dispositivo USB 0 FALSO Unidade de disco Win32_DiskDrive \\. \ PHYSICALDRIVE5 0000 5 USB (unidades de disco padrão) TRUE HTC Android Phone Dispositivo USB \\. \ PHYSICALDRIVE5 0 USBSTOR \ DISK & VEN_HTC & PROD_ANDROID_PHONE & REV_0000 \ HT24YTV03821 &1 0 1 0 0 HT24YTV03821 0 OK Win32_ComputerSystem NYX                                                                                   

E aqui, a saída da unidade lógica wmic - descrição aqui é o que interessa principalmente.

Acesso Disponibilidade BlockSize Caption Compressed ConfigManagerErrorCode ConfigManagerUserConfig CreationClassName Descrição DeviceID DriveType ErrorCleared ErrorDescription ErrorMethodology FileSystem FreeSpace InstallDate LastErrorCode MaximumComponentLength MediaType Nome NumberOfBlocks PNPDeviceID PowerManagementCapabilities PowerManagementSupported ProviderName Purpose QuotasDisabled QuotasIncomplete QuotasRebuilding Tamanho Estado StatusInfo SupportsDiskQuotas SupportsFileBasedCompression SystemCreationClassName SystemName VolumeDirty VolumeName VolumeSerialNumber  
0 C: FALSO Win32_LogicalDisk Disco Fixo Local C: 3 NTFS 139243769856 255 12 C: 249690058752 FALSO VERDADEIRO Win32_ComputerSystem NYX 24FCB3E2            
0 D: FALSO Win32_LogicalDisk Disco Fixo Local D: 3 NTFS 2459783610368 255 12 D: 3000457228288 FALSO VERDADEIRO Win32_ComputerSystem NYX Novo volume C6DFE01A            
                                 G: Disco removível Win32_LogicalDisk G: 2 G: Win32_ComputerSystem NYX                                                                   
                                 H: Disco removível Win32_LogicalDisk H: 2 H: Win32_ComputerSystem NYX                                                                   
0 P: Disco fixo local do Win32_LogicalDisk P: 3 12 P: Win32_ComputerSystem NYX                                                                   
0 Y: FALSO Win32_LogicalDisk Disco Fixo Local Y: 3 NTFS 77826355200 255 12 Y: 250057060352 FALSO VERDADEIRO Unidade NYX Win32_ComputerSystem NYX da desgraça iminente CCC0980F            

Quanto à origem dessas informações - os próprios discos devem ter essas informações em smart (pelo que posso dizer dos smartmontools, alguns dos valores relatados são diferentes, o ssd não teria tempo de rotação, por exemplo). No linux, o hdparm fornece informações detalhadas, da mesma maneira que o wmic (mas muito mais conveniente)

A unidade removível ou não removível é definida em um sinalizador na unidade - na verdade, é possível alternar com as ferramentas certas.

Em suma, ele pede ao disco

Journeyman Geek
fonte
O VID / PID não teria um papel nisso? Acredito que é assim que o sistema operacional encontra os drivers corretos para um dispositivo e o que é, não? Concorde que os pen drives USB têm um bit identificado que mostra ao sistema operacional que é armazenamento removível.
Carl B
Na verdade, estou trabalhando na minha resposta por meio de ferramentas que conheço trabalho. Além disso, você precisará comparar o VID / PID com uma lista conhecida - faz mais sentido usar os dados da própria unidade para dispositivos semi-genéricos desconhecidos.
Journeyman Geek
Obrigado pela resposta. A única coisa complicada aqui é como o Windows poderia saber se meu disco local é um HD ou SSD.
ducktapes
Eu não acho que o Windows faz - não seria necessário. O que é mais importante é o que ordena que ele suporta (como guarnição), que pode ser consultado usando o conjunto de comandos ATA Eu acredito
Journeyman Geek
1

Bem, aqui estão os detalhes técnicos:

O Windows 7 detecta SSDs usando o ATA8-ACS identifica a palavra 217: Taxa de rotação nominal da mídia, com o valor 0001h como mídia não rotativa como dispositivos de estado sólido. Mas nem todos os SSDs aderem à seção 7.16.7.77 da especificação ATA8-ACS1, alguns podem precisar de atualizações de firmware

Fonte

A documentação canônica está disponível aqui , (PDF) página 175. Como tal, é um campo obrigatório e não relacionado ao SMART.

Daniel B
fonte