為什麼我發現 WSL 磁碟機清單與註冊表有差異

為什麼我發現 WSL 磁碟機清單與註冊表有差異

我試圖了解 WSL2 如何與主機 Win11 作業系統互動。

WSL 磁碟機清單簡要報告我的 USB 隨身碟為\\.\PHYSICALDRIVE2,我的內部 SSD 為\\.\PHYSICALDRIVE0

但在註冊表中HKLM\HARDWARE\DEVICEMAP\Scsi\Scsi Port 0\ Scsi Bus 0\Target ID 0\Logical Unit Id 0\DeviceName說我的SSD是PhysicalDrive2

知道為什麼會出現差異嗎?

答案1

我不確定為什麼註冊表會報告DeviceName您的驅動器(或可能生成該屬性的內容)。一般來說,HARDWARE註冊表的這一部分似乎沒有記錄。而且,正如你所看到的,那就是不是無論如何,您需要用於安裝的實際名稱。

作為參考,我的系統中有三個 SSD,但DeviceNameSCSI 部分沒有一個 SSD。例如:

> Get-ChildItem 'HKLM:\HARDWARE\DEVICEMAP\Scsi\Scsi Port 5\Scsi Bus 0\Target Id 0\'


    Hive: HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi\Scsi Port 5\Scsi Bus 0\Target Id 0

Name                           Property
----                           --------
Logical Unit Id 0              InquiryData          : {0, 0, 6, 18...}
                               SerialNumber         : xxxx-xxxxx-xxx
                               Identifier           : NVMe    Samsung SSD 950 BXX7
                               DeviceType           : DiskPeripheral
                               DeviceIdentifierPage : {0, 131, 0, 24...}

可能是以前的 Windows 版本或某些其他軟體在您的系統上的某個時刻設定了此設定。即使註冊表中的該名稱有效,它也可能適用於特定的 SCSI 總線/端口,而不是整個系統。

但無論如何,SCSI 總線註冊表並不是 WSL 掛載所需的名稱來源。這是由 WMI(透過 CIM)傳回的。正如你所看到的本文:

這些數據是從哪裡獲得的?答案是,這些資料是從許多來源獲得的,例如 WinApi、Windows 註冊表、SMBIOS 或 MOF 定義中嵌入的自訂函數。

因此,我們不一定期望您能夠直接從註冊表中獲取驅動器資訊。同樣從那篇文章中,顯然有一種方法可以確定 WMI 如何檢索這些值,但我還沒有深入研究 Delphi 程式碼來了解它如何映射到 PowerShell。對應的 PowerShell 文章似乎已被 Microsoft 下線,可能是因為 PowerShell 中的 WMI 已被 CMI 取代。

作為微軟文件說,繼續用…

GET-CimInstance -query "SELECT * from Win32_DiskDrive"

....取得與 一起使用的正確名稱wsl --mount。另請注意,這些似乎映射到您將看到的相同“磁碟編號”電腦管理->儲存->磁碟管理

答案2

看看其他一些系統,它們都沒有任何 HKLM:\HARDWARE\DEVICEMAP\Scsi... 設備的 DeviceName 值,所以這是一場白費力氣的追逐...

但是,我確實發現 Microsoft-Windows-StorageSpaces-Driver/Operational eventID 207 包含與 Get-CimInstance 中的 \.\PHYSICALDRIVE 編號相符的 DeviceNumber,而且它還包含 DriveID {GUID} 和驅動器序號,這是我最終尋找的是什麼

相關內容