.net - флешки - как узнать vid pid сетевой карты




как определить производителя флэш-накопителей USB? (6)

Мне нужна моя программа для работы только с некоторыми флэш-накопителями USB (от одного производителя) и игнорировать все другие флэш-накопители USB (от других производителей).

можно ли проверить, что определенная USB-карта вставлена ​​в Windows с помощью .NET 2.0? как?

если я найду его через WMI, могу ли я каким-то образом определить, на какую букву диска включен USB-накопитель?




Если объекты Win32_DiskDrive не дают информацию, которую вы ищете, вы также можете посмотреть класс Win32_PhysicalMedia объектов WMI. У них есть Manufacturer, Model, PartNumber и свойства описания, которые могут оказаться полезными.


Переход через Win32 CM_ (Управление устройствами) или WMI и захват PNP ID. Найдите идентификатор VID (идентификатор поставщика).

Я вижу информацию для устройства, которое я только что вставил под Win32_USBControllerDevice и Win32_DiskDrive .


На всякий случай, если кто-то еще достаточно сумасшедший, чтобы сделать это в C ++ - CLI, вот ответ порта smink:

using namespace System;
using namespace System::Management;

void GetUSBDeviceList()
{
    try
    {
        ManagementObjectSearcher^ searcher =
            gcnew ManagementObjectSearcher("root\\CIMV2",
            "SELECT * FROM Win32_DiskDrive");

        for each (ManagementObject^ queryObj in searcher->Get())
        {
            Console::WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
            Console::WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
            Console::WriteLine("Manufacturer: {0}", queryObj["Manufacturer"]);
            Console::WriteLine("Model: {0}", queryObj["Model"]);
            for each (ManagementObject^ b in queryObj->GetRelated("Win32_DiskPartition"))
            {
                Console::WriteLine("  Name: {0}", b["Name"]);
                for each (ManagementBaseObject^ c in b->GetRelated("Win32_LogicalDisk"))
                {
                    Console::WriteLine("    Name: {0}", c["Name"]); // here it will print drive letter
                }
            }
            // ...
            Console::WriteLine("--------------------------------------------");
        }      
    }
    catch (ManagementException^ e)
    {
        Console::WriteLine(e->StackTrace);
    }

    Console::ReadLine();
}

Примечание. Мне пришлось вручную добавить ссылку на библиотеку System.Management в свойствах моего объекта.


EDIT: Добавлен код для печати буквы диска.

Проверьте, работает ли этот пример для вас. Он использует WMI.

Console.WriteLine("Manufacturer: {0}", queryObj["Manufacturer"]);
...
Console.WriteLine("    Name: {0}", c["Name"]); // here it will print drive letter

Полный образец кода:

namespace WMISample
{
    using System;
    using System.Management;

    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher =
                    new ManagementObjectSearcher("root\\CIMV2",
                    "SELECT * FROM Win32_DiskDrive");

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("DeviceID: {0}", queryObj["DeviceID"]);
                    Console.WriteLine("PNPDeviceID: {0}", queryObj["PNPDeviceID"]);
                    Console.WriteLine("Manufacturer: {0}", queryObj["Manufacturer"]);
                    Console.WriteLine("Model: {0}", queryObj["Model"]);
                    foreach (ManagementObject b in queryObj.GetRelated("Win32_DiskPartition"))
                    {
                        Console.WriteLine("  Name: {0}", b["Name"]);
                        foreach (ManagementBaseObject c in b.GetRelated("Win32_LogicalDisk"))
                        {
                            Console.WriteLine("    Name: {0}", c["Name"]); // here it will print drive letter
                        }
                    }
                    // ...
                    Console.WriteLine("--------------------------------------------");
                }      
            }
            catch (ManagementException e)
            {
                Console.WriteLine(e.StackTrace);
            }

            Console.ReadLine();
        }
    }
}

Я думаю, что эти свойства должны помочь вам отличить оригинальные USB-накопители от других. Протестируйте несколько ручек, чтобы проверить, совпадают ли значения. См. Полную ссылку на свойства Win32_DiskDrive здесь:

http://msdn.microsoft.com/en-us/library/aa394132(VS.85).aspx

Убедитесь, что эта статья также поможет вам:

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/48a9758c-d4db-4144-bad1-e87f2e9fc979





usb