簡體   English   中英

給定硬盤字母,我如何獲得制造商序列號?

[英]Given a hard disk letter, how can I get the manufacturer serial number?

我在嘗試確定驅動器的制造商序列號時遇到了很多麻煩,這可能是最快的方法(而不是調用WMI )。

我可以用來查詢制造商序列號的信息是驅動器號(例如C:\\ )或操作系統分配給驅動器的數字序列號(例如4030771280 ),我可以檢索該信息通過指定一個調用GetVolumeInformation函數的驅動器號。

關於如何使用WMI檢索制造商序列號的問題,Stackoverflow中有很多示例和Q / A,但是所有這些問題和答案都是針對CURRENT驅動器的,而Win32_PhysicalMediaWin32_DiskDrive類似乎並未公開我可以使用的屬性。與WHERE一起使用以查詢給定驅動器號或其系統的序列號的特定驅動器的序列號

我願意接受包含中間步驟的解決方案,例如“ 首先需要從驅動器號中獲取設備ID,然后可以使用該值查詢WMI ”(當然,最好使用WinAPI函數來避免WMI調用對性能的負面影響。 ),問題是我不知道如何執行如引用的那樣的必需檢索,因為卷管理功能似乎沒有有用的功能來從驅動器號中檢索磁盤信息,只是我在其上獲得的GetVolumeInformation函數只能檢索系統的串行信息,該信息是我不能用來在WMI上進行查詢的值,以及磁盤標題,我也不能使用它,因為多個磁盤可能具有相同的標題...

沒有簡單的方法可以根據卷號獲取硬盤驅動器的序列號-例如,在RAID 5的情況下,有多個物理驅動器可以構成卷。 要獲得硬盤驅動器的序列號會更容易:

// A little bit modified code from https://stackoverflow.com/questions/24022130/generate-activation-key-from-hardware-id
public string identifier(string wmiClass, string wmiProperty)
        {
            string result = "";
            System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass);
            System.Management.ManagementObjectCollection moc = mc.GetInstances();
            foreach (System.Management.ManagementObject mo in moc)
            {
                //Only get the first one
                if (result == "")
                {
                    try
                    {
                        result = mo[wmiProperty].ToString();
                        break;
                    }
                    catch
                    {
                    }
                }
            }
            return result;
        }

並像這樣使用它:

identifier("Win32_DiskDrive", "SerialNumber"));

此源代碼無法滿足您的需求,但可能會導致找到解決方案。

編輯:沒有WMI,沒有簡單的方法來獲取硬件信息-您很可能必須編寫自己的庫才能與硬件交互。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM