2012-08-16 15 views
6

DISKPART komut satırı yardımcı programını kullanarak, ihtiyacım olanı bana görüntüleyen bir "Konum yolu" adı verilen bir şey bulabilirim, diskpart disklerinden birini seçtikten sonra bu komutu kullanarak görüntüleyebilirsiniz.Belirli bir disk için SATA kanalını nasıl belirleyebilirim?

Ben bu sınıfın aracılığıyla programlama yoluyla bu bilgiyi alabilirsiniz görünür: MSFT_Disk

Ben bu sınıfın bir örneğini almak hakkında emin değilim. sayfası bu

Windows 8 içindir kimseyi mu bahseder gibi ben WMI sınıflar için bir ManagementObjectSearcher kullanarak birkaç örnek var ama bu yöntem benim için çalışmıyor, ben de Windows 7'de MSFT_Disk 'ın mevcudiyeti emin değilim SATA kanal bilgilerini veya diskin "konum yolunu" almak için iyi bir yol biliyor musunuz?

+0

Muhtemelen [VDS] kullanmak gerekecektir .net freamwork ait System.Management.dll referansı (ekle http://msdn.microsoft .com/tr-tr/kütüphane/windows/masa/bb986750% 28v = VS.85% 29.aspx). .NET'ten nasıl kullanacağınız hakkında fazla bir şey bulamıyorum ama bu [http://esotericalstuff.wordpress.com/2010/11/18/vds-activities-under-c-2/] gibi görünüyor. bazı görevleri yerine getirmek için. Sen de onun içinden geçebilirsin. –

+0

'HKLM \ SYSTEM \ CurrentControlSet \ Enum \ IDE \ device \ id: LocationInformation' numaralarını numaralandırmayı düşündünüz mü? Bu gibi bilgiler içerir ** Kanal 4, Hedef 0, Lun 0 ** – vane

cevap

0

Windows 8 gerektirmeyen istiyorsanız, ben WMI gitmek için yol olduğuna inanıyoruz:

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

Ben SATA bağlantı noktası numaralarını doğrulamak için davamı açmak çatlak yoktu, ama yukarıdaki uygulama gibi görünüyor 3 SATA sabit diskli makinemde makul sonuçlar veriyor.

0

Konum yolunu almak istiyorsanız, SetupDiGetDeviceRegistryProperty, sizin için uygun bir işlevdir. Özellik değerini SPDRP_LOCATION_INFORMATION olarak ayarlayın.

DeviceInfoSet ve DeviceInfoData numaralarını almak için aygıtları nasıl numaralandıracağınızı zaten biliyorsunuzdur.

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

Not: İlk 4,0

İlgili konular