Wątek przeniesiony 2021-07-22 09:31 z C# i .NET przez cerrato.

Temat pozornie oklepany: Serial sprzętowy USB

0

Witam wszystkich
Podpowiedzcie proszę jak pobrać serial sprzętowy dysku (tu USB) bez WMI, tylko przykładowo przez COM. Dlaczego? Jest problem na wirtualnej maszynie. O ile na mojej wirtualce działa bezproblemowo zarówno kod przez WMI jak i powershell-owe Get-PhysicalDisk, to na innej wirtualce (vmware player) zamiast spodziewanego numeru jest 5 i prostokącik. Program USBDeview jest w stanie odczytać serial, więc podejrzewam, że jest to kwestia raczej interfejsu (pomijam fakt, że coś musi być skopane). Mało tego, przesłałem swoją przetestowaną wirtualkę do tego samego gościa, aby to sprawdził u siebie. Efekt jest identyczny. To chyba oznacza, że musi być coś u niego na styku system macierzysty i wmware player. Chyba że macie jakiś inny pomysł?

0

Dziękuję. Inspirując się znalezionymi przykładami mam coś takiego:

      ManagementObjectSearcher searcher = new ManagementObjectSearcher( "SELECT * FROM Win32_DiskDrive" );
      foreach( ManagementObject wmi_HD in searcher.Get() )
      {
        string pdid = wmi_HD["PnPDeviceID"] as string;
        string snOryg = wmi_HD["SerialNumber"] as string;
        if( pdid != null )
        {
          Console.WriteLine( "SN z SerialNumber: " + snOryg + " PnPDeviceID: " + pdid );
        }
      }
      Console.ReadKey();

Efekt działania na wirtualce "zdalnej" (jest jakieś 400km ode mnie)
SN z SerialNumber: VMWare NVME_0000 PnPDeviceID: SCSI\DISK&VEN_NVME&PROD_VMWARE_VIRTUAL_N\5&25A13950&0&000000
SN z SerialNumber: ♥2 PnPDeviceID: USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07\2B79E388&0

Problem polega na tym, że na zdalnej wirtualce mam wynik z wmi_HD["SerialNumber"] równy ♥2. Nie potrafię tego obejść. Podobny efekt był na innym pendrive. Ok, zdarza się, że HD["PnPDeviceID"] zawiera rzeczywisty serial sprzętowy. Nie jest to jednak pewne rozwiązanie, co ilustruje wynik z mojej lokalnej wirtualki (pierwsza i druga linia)

SN z SerialNumber: VMWare NVME_0000 PnPDeviceID: SCSI\DISK&VEN_NVME&PROD_VMWARE_VIRTUAL_N\5&25A13950&0&000000
SN z SerialNumber: AA00000000000489 PnPDeviceID: USBSTOR\DISK&VEN_SAMSUNG&PROD_FLASH_DRIVE&REV_1100\0374221030001049&0
SN z SerialNumber: 4C531001520813117391 PnPDeviceID: USBSTOR\DISK&VEN_SANDISK&PROD_ULTRA_FIT&REV_1.00\4C531001520813117391&0

Czy da się coś z tym zrobić?

0

Przypomnę tylko, że ♥2 jest uzyskiwany po power-shell-owym Get-PhysicalDisk.

1
  1. nie sprawdzasz czy wartość jest null (a może być)
  2. używasz "as string" zamiast .ToString(); - nie znam C# więc nie wiem czy to ma znaczenie, ale warto spróbować tej drugiej opcji
  3. spróbuj tego wmi_HD.GetPropertyValue("SerialNumber").ToString(); (kod z podanego wyżej SO)
0

Akurat kwestia stringów nie ma znaczenia. Chodzi tylko o konwersję. Metoda .ToString() jest dedykowana do tego celu, ale jeśli użyjemy przypisania do zmiennej typu string, to będzie dokładnie to samo. Sednem problemu jest, że również po power-shell-owym Get-PhysicalDisk jest taki sam efekt, a ja szukam obejścia.

2

ale sam mówiłeś że WMI z jakiegoś powodu nie działa, więc czemu wybrałeś rozwiązanie go używające. Są tam co najmniej 3 rozwiązania nie używające WMI - co prawda jedno wywołuje po prostu komendę vol, a jedno jest w C++ ale da się przepisać na C#. Najlepsze rozwiązanie to chyba to to z użyciem zewnętrznej DLL-ki

badziewiak napisał(a):

Akurat kwestia stringów nie ma znaczenia. Chodzi tylko o konwersję. Metoda .ToString() jest dedykowana do tego celu, ale jeśli użyjemy przypisania do zmiennej typu string, to będzie dokładnie to samo.

Będzie to samo jeśli robisz to na stringu, ale robisz to na wmi_HD["SerialNumber"] które zwraca typ object i w zasadzie nie wiadomo czym jest. Teoretycznie może być obiektem z nadpisanym ToString i wtedy będzie ono dawało inny rezultat.

Jaki jest rzeczywisty serial który daje ♥2? Być może łatwo to jakoś skonwertować

0

Ale czy Ty próbujesz pobrać SN dysku wirtualnego na maszynie wirtualnej? Czy dysku fizycznego i zrobionego passthrough do VMki?

1 użytkowników online, w tym zalogowanych: 0, gości: 1