USBフラッシュドライブの製造元を決定する方法は?


6

特定のUSBフラッシュドライブ(1つのメーカー)のみで動作し、他のすべてのUSBフラッシュドライブ(他のメーカーのもの)は無視する必要があります。

特定のUSBカードが.NET 2.0を使用してWindowsに挿入されていることを確認することは可能ですか?どうやって?

WMIで見つかった場合、USBドライブが搭載されているドライブ文字をどういう形で判断できますか?

11

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ドライブを区別しやすくすべきだと思います。いくつかのペンドライブでテストして、値が同じかどうかを確認してください。この記事はあなたにどんな助けもあれば

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

チェック:Win32のCM_(デバイス管理)のいずれかを通って行く

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


0

おそらく#usblib:

http://www.icsharpcode.net/OpenSource/SharpUSBLib/


2

あなたは管理対象外のWin32 APIはこれを処理するために呼び出して使用することができます。

http://www.codeproject.com/KB/system/EnumDeviceProperties.aspx


2

またはここWin32_DiskDriveプロパティの完全なリファレンスを参照してください。 WMIとPNP IDを取得します。 VID(Vendor ID)を探します。

私は、ちょうどWin32_USBControllerDeviceWin32_DiskDriveの下に挿入したデバイスの情報を参照してください。


2

この情報は、WMIを通じて入手できる場合があります。以下は、WMIを使用してWin32_DiskDriveオブジェクトに関する情報を取得するvbsスクリプト(実行する.vbsを含むテキストファイルにコピー)です。 製造元の情報は標準ディスクドライブと言うこともできますが、モデル番号には探しているものが含まれている可能性があります。

Set Drives = GetObject("winmgmts:{impersonationLevel=impersonate,(Backup)}").ExecQuery("select * from Win32_DiskDrive") 
for each drive in drives 
Wscript.echo "Drive Information:" & vbnewline & _ 
     "Availability: " & drive.Availability & vbnewline & _ 
     "BytesPerSector: " & drive.BytesPerSector & vbnewline & _ 
     "Caption: " & drive.Caption & vbnewline & _ 
     "CompressionMethod: " & drive.CompressionMethod & vbnewline & _ 
     "ConfigManagerErrorCode: " & drive.ConfigManagerErrorCode & vbnewline & _ 
     "ConfigManagerUserConfig: " & drive.ConfigManagerUserConfig & vbnewline & _ 
     "CreationClassName: " & drive.CreationClassName & vbnewline & _ 
     "DefaultBlockSize: " & drive.DefaultBlockSize & vbnewline & _ 
     "Description: " & drive.Description & vbnewline & _ 
     "DeviceID: " & drive.DeviceID & vbnewline & _ 
     "ErrorCleared: " & drive.ErrorCleared & vbnewline & _ 
     "ErrorDescription: " & drive.ErrorDescription & vbnewline & _ 
     "ErrorMethodology: " & drive.ErrorMethodology & vbnewline & _ 
     "Index: " & drive.Index & vbnewline & _ 
     "InterfaceType: " & drive.InterfaceType & vbnewline & _ 
     "LastErrorCode: " & drive.LastErrorCode & vbnewline & _ 
     "Manufacturer: " & drive.Manufacturer & vbnewline & _ 
     "MaxBlockSize: " & drive.MaxBlockSize & vbnewline & _ 
     "MaxMediaSize: " & drive.MaxMediaSize & vbnewline & _ 
     "MediaLoaded: " & drive.MediaLoaded & vbnewline & _ 
     "MediaType: " & drive.MediaType & vbnewline & _ 
     "MinBlockSize: " & drive.MinBlockSize & vbnewline & _ 
     "Model: " & drive.Model & vbnewline & _ 
     "Name: " & drive.Name & vbnewline & _ 
     "NeedsCleaning: " & drive.NeedsCleaning & vbnewline & _ 
     "NumberOfMediaSupported: " & drive.NumberOfMediaSupported & vbnewline & _ 
     "Partitions: " & drive.Partitions & vbnewline & _ 
     "PNPDeviceID: " & drive.PNPDeviceID & vbnewline & _ 
     "PowerManagementSupported: " & drive.PowerManagementSupported & vbnewline & _ 
     "SCSIBus: " & drive.SCSIBus & vbnewline & _ 
     "SCSILogicalUnit: " & drive.SCSILogicalUnit & vbnewline & _ 
     "SCSIPort: " & drive.SCSIPort & vbnewline & _ 
     "SCSITargetId: " & drive.SCSITargetId & vbnewline & _ 
     "SectorsPerTrack: " & drive.SectorsPerTrack & vbnewline & _ 
     "Signature: " & drive.Signature & vbnewline & _ 
     "Size: " & drive.Size & vbnewline & _ 
     "Status: " & drive.Status & vbnewline & _ 
     "StatusInfo: " & drive.StatusInfo & vbnewline & _ 
     "SystemCreationClassName: " & drive.SystemCreationClassName & vbnewline & _ 
     "SystemName: " & drive.SystemName & vbnewline & _   
     "TotalCylinders: " & drive.TotalCylinders & vbnewline & _   
     "TotalHeads: " & drive.TotalHeads & vbnewline & _   
     "TotalSectors: " & drive.TotalSectors & vbnewline & _   
     "TotalTracks: " & drive.TotalTracks & vbnewline & _   
     "TracksPerCylinder: " & drive.TracksPerCylinder & vbnewline 
next 

0

こんにちは、これはWMI

Option Explicit 
Dim objWMIService, objItem, colItems, strComputer 

' On Error Resume Next 
strComputer = "." 

Set objWMIService = GetObject("winmgmts:\\" _ 
& strComputer & "\root\cimv2") 
Set colItems = objWMIService.ExecQuery(_ 
"Select Manufacturer from Win32_DiskDrive") 

For Each objItem in colItems 
Wscript.Echo "Computer: " & objItem.SystemName & VbCr & _ 
    "Manufacturer: " & objItem.Manufacturer & VbCr & _ 
    "Model: " & objItem.Model 
Next 

を使用してメーカーよりも役に立つことModelcouldしてみてください。ファームウェアリビジョンは、1つのメーカーと1つのファームウェアリビジョンだけにロックする場合に表示されます。

希望します。


1

オブジェクトが見つからない場合は、Win32_PhysicalMediaのWMIオブジェクトクラスを参照することもできます。それらにはManufacturer、Model、PartNumber、およびdescriptionプロパティがあり、これらが有用であると思われます。


0

ただ、誰が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(); 
} 

注:私は手動で私のporjectにSystem.Managementライブラリへの参照を追加する必要がありましたプロパティ。