2012-08-16 14 views
6

Używając narzędzia wiersza poleceń, mogę uzyskać coś, co nazywa się "Ścieżką lokalizacji", która wydaje mi się potrzebna, możesz to sprawdzić, używając polecenia detail disk po wybraniu jednego z dysków w diskpart.Jak mogę określić kanał SATA dla danego dysku?

Wydaje mogę uzyskać te informacje za pośrednictwem tej klasy programowo: MSFT_Disk

jestem pewien, w jaki sposób uzyskać instancji tej klasy. Mam kilka przykładów z użyciem ManagementObjectSearcher dla WMI klas, ale ta metoda nie działa na mnie, jestem też pewien dostępności MSFT_Disk jest w Windows 7 jako strona mówi, że to jest dla Windows 8.

Czy ktoś znasz dobry sposób na uzyskanie informacji o kanale SATA lub "ścieżce lokalizacji" dysku?

+0

prawdopodobnie będziesz musiał użyć [VDS] (http://msdn.microsoft .com/en-us/library/windows/desktop/bb986750% 28v = vs.85% 29.aspx). Nie mogę znaleźć wiele na temat korzystania z .NET, ale znalazłem [this] (http://esotericalstuff.wordpress.com/2010/11/18/vds-activities-under-c-2/), który wydaje się przejść przez wykonanie niektórych zadań. Możesz być również w stanie wykonać PInvoke na swój sposób. –

+0

Czy myślałeś o wyliczeniu 'HKLM \ SYSTEM \ CurrentControlSet \ Enum \ IDE \ device \ id: LocationInformation'? Zawiera informacje takie jak ten ** Kanał 4, Cel 0, Lun 0 ** – vane

Odpowiedz

0

Jeśli chcesz nie wymagają Windows 8, wierzę WMI jest do zrobienia:

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(); 
     } 
    } 
} 

nie złamać otworzyć moją sprawę do weryfikacji numerów portów SATA, ale przede aplikacja wygląda daje rozsądne wyniki na moim komputerze z 3 dyskami twardymi SATA.

0

Jeśli chcesz uzyskać ścieżkę lokalizacji, SetupDiGetDeviceRegistryProperty jest funkcją, której szukasz. Ustaw wartość właściwości na SPDRP_LOCATION_INFORMATION.

Zakładam, że już wiesz, jak wyliczyć urządzenia, aby uzyskać DeviceInfoSet i DeviceInfoData.

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...

Uwaga: najpierw dodać odniesienie System.Management.dll .NET freamwork 4,0

Powiązane problemy