2012-08-16 4 views
6

DISKPART 명령 줄 유틸리티를 사용하면 필요한 위치에 "위치 경로"라는 것을 표시 할 수 있습니다. diskpart에서 디스크 중 하나를 선택한 후 detail disk 명령을 사용하여 볼 수 있습니다.주어진 디스크의 SATA 채널을 어떻게 확인할 수 있습니까?

내가이 클래스를 통해 프로그래밍 방식으로이 정보를 얻을 수 있습니다 나타납니다 MSFT_Disk

내가이 클래스의 인스턴스를 얻는 방법에 대한 확신입니다. 페이지가이

윈도우 8을위한 사람을 않는 언급으로 나는 WMI 클래스에 대한 ManagementObjectSearcher를 사용하는 몇 가지 예를 가지고 있지만 그 방법은 나를 위해 작동하지 않습니다, 나는 또한 윈도우 7에서 MSFT_Disk의 가용성 확실치 SATA 채널 정보 또는 디스크의 "위치 경로"를 얻는 좋은 방법을 알고 있습니까?

+0

당신은 아마 [VDS]를 사용해야합니다 .NET의 freamwork의 System.Management.dll의 참조를 (추가 http://msdn.microsoft .com/ko-us/library/windows/desktop/bb986750 % 28v = vs.85 % 29.aspx). .NET에서 사용하는 방법을 많이 찾을 수는 없지만 [this] (http://esotericalstuff.wordpress.com/2010/11/18/vds-activities-under-c-2/)를 찾았습니다. 몇 가지 작업을 수행 할 수 있습니다. 당신도 그것을 통해 당신의 방법을 PInvoke 수 있습니다. –

+0

'HKLM \ SYSTEM \ CurrentControlSet \ Enum \ IDE \ device \ id : LocationInformation'에 대해 열거 했습니까? ** Channel 4, Target 0, Lun 0 **과 같은 정보를 포함합니다. – vane

답변

0

는 Windows 8을 필요로하지하려면, 내가 WMI 갈 방법이라고 생각 :

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

내가 SATA 포트 번호를 확인하는 내 경우를 열 균열하지 못했지만, 위의 응용 프로그램의 모습 3 개의 SATA 하드 드라이브로 내 컴퓨터에서 합리적인 결과를 얻습니다.

0

위치 경로를 얻으려면 SetupDiGetDeviceRegistryProperty이 찾고있는 기능입니다. 속성 값을 SPDRP_LOCATION_INFORMATION으로 설정하십시오.

나는 이미 DeviceInfoSetDeviceInfoData을 얻기 위해 장치를 열거하는 방법을 알고 있다고 가정합니다.

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

참고 : 먼저 4.0