有人能从技术上解释一下 Windows 如何识别插入计算机的驱动器类型吗?
我问这个问题是因为我即将创建一个只将数据写入特定类型的存储驱动器的程序......而且我很好奇它在幕后是如何发生的。
答案1
您可以从两个地方获取此信息:wmic diskdrive 和 wmic logicaldisk -(当然,还有它们的等效 wmi 绑定)。
wmic diskdrive 的输出 - 注意功能描述和媒体类型
可用性 BytesPerSector 功能 CapabilityDescriptions 标题 CompressionMethod ConfigManagerErrorCode ConfigManagerUserConfig CreationClassName DefaultBlockSize 描述 DeviceID ErrorCleared ErrorDescription ErrorMethodology FirmwareRevision 索引 InstallDate InterfaceType LastErrorCode 制造商 MaxBlockSize MaxMediaSize MediaLoaded MediaType MinBlockSize 型号名称 NeedsCleaning NumberOfMediaSupported 分区 PNPDeviceID PowerManagementCapabilities PowerManagementSupported SCSIBus SCSILogicalUnit SCSIPort SCSITargetId SectorsPerTrack SerialNumber 签名大小 状态 StatusInfo SystemCreationClassName SystemName TotalCylinders TotalHeads TotalSectors TotalTracks TracksPerCylinder 512 {3, 4} {"随机访问", "支持写入"} Hitachi HDS723030ALA640 0 FALSE Win32_DiskDrive 磁盘驱动器 \\.\PHYSICALDRIVE0 MKAO 0 IDE(标准磁盘驱动器) TRUE 固定硬盘介质 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 手机 USB 设备 0 FALSE Win32_DiskDrive 磁盘驱动器 \\.\PHYSICALDRIVE4 0000 4 USB(标准磁盘驱动器) TRUE HTC Android 手机 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} {"随机访问", "支持写入"} Samsung SSD 840 系列 0 FALSE Win32_DiskDrive 磁盘驱动器 \\.\PHYSICALDRIVE1 DXT0 1 IDE(标准磁盘驱动器) TRUE 固定硬盘介质 Samsung SSD 840 系列 \\.\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} {"随机访问", "支持写入"} ST92503010AS 0 FALSE Win32_DiskDrive 磁盘驱动器 \\.\PHYSICALDRIVE3 0005 3 IDE(标准磁盘驱动器) TRUE 固定硬盘介质 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} {"随机访问", "支持写入"} FUJITSU MHW2040BH 0 FALSE Win32_DiskDrive 磁盘驱动器 \\.\PHYSICALDRIVE2 0000 2 IDE(标准磁盘驱动器) TRUE 固定硬盘介质 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 手机 USB 设备 0 FALSE Win32_DiskDrive 磁盘驱动器 \\.\PHYSICALDRIVE5 0000 5 USB(标准磁盘驱动器) TRUE HTC Android 手机 USB 设备 \\.\PHYSICALDRIVE5 0 USBSTOR\DISK&VEN_HTC&PROD_ANDROID_PHONE&REV_0000\HT24YTV03821&1 0 1 0 0 HT24YTV03821 0 OK Win32_ComputerSystem NYX
这里,wmic logicaldisk 的输出 - 此处的描述是我们主要感兴趣的。
访问可用性块大小标题压缩配置管理器错误代码配置管理器用户配置创建类名描述设备 ID 驱动器类型错误清除错误描述错误方法文件系统可用空间安装日期上次错误代码最大组件长度媒体类型名称块数 PNPDeviceID 电源管理功能电源管理支持提供商名称目的配额禁用配额不完整配额重建大小状态状态信息支持磁盘配额支持基于文件的压缩系统创建类名系统名称卷脏卷名称卷序列号 0 C: FALSE Win32_LogicalDisk 本地固定磁盘 C: 3 NTFS 139243769856 255 12 C: 249690058752 FALSE TRUE Win32_ComputerSystem NYX 24FCB3E2 0 D: FALSE Win32_LogicalDisk 本地固定磁盘 D: 3 NTFS 2459783610368 255 12 D: 3000457228288 FALSE TRUE Win32_ComputerSystem NYX 新卷 C6DFE01A G:Win32_LogicalDisk 可移动磁盘 G:2 G:Win32_ComputerSystem NYX H:Win32_LogicalDisk 可移动磁盘 H:2 H:Win32_ComputerSystem NYX 0 Q:Win32_LogicalDisk 本地固定磁盘 Q:3 12 Q:Win32_ComputerSystem NYX 0 Y: FALSE Win32_LogicalDisk 本地固定磁盘 Y: 3 NTFS 77826355200 255 12 Y: 250057060352 FALSE TRUE Win32_ComputerSystem NYX Drive of Impending Doom CCC0980F
至于这些信息来自哪里 - 磁盘本身应该在 smart 中包含该信息(从我从 smartmontools 中了解到的情况来看,报告的一些值是不同的,例如,ssd 没有启动时间)。在 linux 上,hdparm 会为您提供详细信息,使用 wmic 的方式相同(但更方便)
可移动驱动器与不可移动驱动器在驱动器上的标志上设置 - 这实际上可以使用正确的工具进行切换。
简而言之,它要求磁盘