1

現在、WMIを介した呼び出しを使用して、仮想マシンのハードドライブシリアルを返す関数があります。これは、実際の物理ハードドライブで実行するとうまく機能します。ただし、仮想ディスクを備えた仮想マシンで関数を実行すると、ハードドライブのシリアルは常に同じ一連の1と0として返されます。この手法を使用して、特定のマシンを識別しようとしています。変更されない可能性が高い(仮想)マシンで使用されているハードウェアを識別する、ある種の識別子を取得するためのより信頼性の高い方法はありますか?

注意として、私は提案としてMACアドレスを教えてもらいましたが、バインドされているNICを交換する必要がある場合に、ソフトウェアが壊れないようにしたいと思います。

このシリアルはすべての呼び出しと一貫している必要があるため、RAIDを介して構成されたシステムハードドライブに何が返されるかについても懸念しています。ただし、これをテストするためのRAID構成システムがないため、そもそも何が返されるのかわかりません。

編集シリアル番号が一意でなくても、ソフトウェアを仮想マシンにロックする信頼できる方法を見つけたので、VM部分はもはや問題ではありません。ただし、特定のRAID構成でこれがどのように回復するかはまだわかりません。また、前述のように、テストするRAID構成のマシンの贅沢はなく、テストする構成もいくつかありません。これに関するどんな援助も非常にありがたいです。

HDシリアル機能は次のとおりです。

string Win32_Class = string.Empty;
string Win32_Property = string.Empty;
string systemDrive = null;
try
{
    systemDrive = System.Environment.GetFolderPath(System.Environment.SpecialFolder.System).Substring(0, 2);
    Win32_Class = "Win32_LogicalDisk";
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(string.Format("SELECT * FROM {1} WHERE DeviceID='{0}'", systemDrive, Win32_Class)))
    {
        foreach (ManagementObject logicalDisk in searcher.Get())
        {
            Win32_Class = "Win32_DiskPartition";
            foreach (ManagementObject partition in logicalDisk.GetRelated(Win32_Class))
            {
                Win32_Class = "Win32_DiskDrive";
                foreach (ManagementObject diskDrive in partition.GetRelated(Win32_Class))
                {
                    Win32_Class = "Win32_PhysicalMedia";
                    foreach (ManagementObject diskMedia in diskDrive.GetRelated(Win32_Class))
                    {
                        Win32_Property = "SerialNumber";
                        mySystemDeviceSerial = diskMedia[Win32_Property].ToString().Trim();
                    }
                }
            }
        }
    }
}
4

2 に答える 2

2

VMインスタンスを識別したい場合は、Win32_ComputerSystemProductインスタンスのUUIDプロパティを使用できます。現実の世界では、これはマザーボード上のIDにマッピングされます。VMでは、これにより、ドライブに関係なく、VM構成ごとに一意の値が返されます(ただし、VMが複製または移動された場合にどうなるかはわかりません)。

于 2013-05-09T21:39:21.920 に答える
1

「論理」ディスクのシリアル番号を使用できます。これは、ディスクが再パーティション化された場合に変更されます。冗長RAIDセットアップの1つのドライブが変更されても、変更されません。これはブロックレベルで保存されるものなので、実際のストレージ設定は関係ありません。

インストールボリュームののVolumeSerialNumberプロパティが必要です。Win32_LogicalDisk

http://msdn.microsoft.com/en-us/library/windows/desktop/aa394173(v=vs.85).aspx

于 2012-10-16T15:30:38.847 に答える