2012-08-16 13 views
6

Mit dem Befehlszeilen-Dienstprogramm DISKPART kann ich etwas namens "Location path" bekommen, das mir zu geben scheint, was ich brauche. Sie können dies mit dem Befehl detail disk anzeigen, nachdem Sie eine Ihrer Festplatten in diskpart ausgewählt haben.Wie kann ich den SATA-Kanal für eine bestimmte Festplatte ermitteln?

Es scheint, ich diese Informationen erhalten kann über diese Klasse programmatisch: MSFT_Disk

Ich bin nicht sicher, wie eine Instanz dieser Klasse zu erhalten. Ich habe ein paar Beispiele für eine ManagementObjectSearcher für WMI Klassen verwenden, aber diese Methode funktioniert nicht für mich, ich bin auch nicht sicher MSFT_Disk ‚s Verfügbarkeit in Windows 7 als die Seite erwähnt, dass dies für Windows 8.

Hat jemand eine gute Möglichkeit, SATA-Kanalinformationen oder den "Standortpfad" einer Festplatte zu erhalten?

+0

Sie werden wahrscheinlich [VDS] verwenden (http://msdn.microsoft .com/de-us/library/windows/desktop/bb986750% 28v = vs.85% 29.aspx). Kann nicht viel finden, wie man es von .NET verwendet, aber ich fand [das] (http://esotericalstuff.wordpress.com/2010/11/18/vds-activities-under-c-2/), das scheint um einige Aufgaben zu erledigen. Vielleicht kannst du dich auch selbst durchwühlen. –

+0

Haben Sie darüber nachgedacht, 'HKLM \ SYSTEM \ CurrentControlSet \ Enum \ IDE \ device \ id: LocationInformation' aufzuzählen? Es enthält Informationen wie folgt: Kanal 4, Ziel 0, Lun 0 ** – vane

Antwort

0

Wenn Sie nicht Windows 8 erfordern, glaube ich WMI ist der Weg zu gehen:

using System; 
using System.Linq; 
using System.Management; 

namespace DiskScanPOC 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var managementScope = new ManagementScope(); 

      //get disk drives 
      var query = new ObjectQuery("select * from Win32_DiskDrive"); 
      var searcher = new ManagementObjectSearcher(managementScope, query); 
      var oReturnCollection = searcher.Get(); 

      //List all properties available, in case the below isn't what you want. 
      var colList = oReturnCollection.Cast<ManagementObject>().First(); 
      foreach (var property in colList.Properties) 
      { 
       Console.WriteLine("Property: {0} = {1}", property.Name, property.Value); 
      } 

      //loop through found drives and write out info 
      foreach (ManagementObject oReturn in oReturnCollection) 
      { 
       Console.WriteLine("Name : " + oReturn["Name"]); 
       Console.WriteLine("Target Id: " + oReturn["SCSITargetId"]); 
       Console.WriteLine("Port: " + oReturn["SCSIPort"]); 
      } 
      Console.Read(); 
     } 
    } 
} 

Ich habe knacken nicht mein Fall öffnen Sie die SATA-Port-Nummern, um zu überprüfen, aber die oben app aussieht es gibt vernünftige Ergebnisse auf meiner Maschine mit 3 SATA Festplatten.

0

Wenn Sie den Standortpfad abrufen möchten, ist SetupDiGetDeviceRegistryProperty die Funktion, die Sie suchen. Legen Sie den Eigenschaftswert auf SPDRP_LOCATION_INFORMATION fest.

Ich nehme an, dass Sie schon wissen, wie man Geräte aufzählt, um die DeviceInfoSet und DeviceInfoData zu erhalten.

0
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

using System.Management; 

namespace Hard_Disk_Interface 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void btnCheck_Click(object sender, EventArgs e) 
     { 
      WqlObjectQuery q = new WqlObjectQuery("SELECT * FROM Win32_IDEController"); 
      ManagementObjectSearcher res = new ManagementObjectSearcher(q); 
      lblHDDChanels.Text = string.Empty; 
      foreach (ManagementObject o in res.Get()) 
      { 
       string Caption = o["Caption"].ToString(); 

       lblHDDChanels.Text += Caption + "\n\n"; 
       if (Caption.Contains("Serial")) 
       { 
        lblInterface.Text = "S-ATA"; 
       } 
      } 
     } 
    } 
} 

This is demo...

Hinweis: Fügen Sie zunächst die Referenz von System.Management.dll von .net 4.0 freamwork

Verwandte Themen