本人c#新手,因公司打遊擊戰被迫從android臨時轉成做c#做工廠notebook測試項目。現在跟大家分享一下如何擷取AHCI BASE ADDRESS,網上這種資料我查了幾乎是沒有,是以希望看到我這篇文章的人少走一些彎路。
private string getAhciBaseAddress()
{
string output = ""; //輸出字元串
ProcessStartInfo StartInfo = new ProcessStartInfo();
StartInfo.FileName = @"C:\pciutils-3.2.0\lspci.exe";
StartInfo.Arguments = "-v -s.2";//“/C”表示執行完指令後馬上退出
StartInfo.UseShellExecute = false;//不使用系統外殼程式啟動
StartInfo.RedirectStandardInput = false;//不重定向輸入
StartInfo.RedirectStandardOutput = true; //重定向輸出
StartInfo.CreateNoWindow = true; //不建立視窗
StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process myProcess = null;
try
{
myProcess = Process.Start(StartInfo);
while (!myProcess.HasExited)
{
myProcess.WaitForExit(3000);
}
output = myProcess.StandardOutput.ReadToEnd();//讀取程序的輸出
Console.WriteLine("output==" + output);
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
finally
{
if (myProcess != null) myProcess.Close();
}
string key = "Memory at ";
int index = output.IndexOf(key);
string addressString = "";
int length = IntPtr.Size == 4 ? 8 : 16;
if (index!= -1)
{
addressString = output.Substring(index + +key.Length, length);
}
return addressString;
}
關于這個第三方的pciutils-3.2.0 包,給個連結給你.http://download.csdn.net/detail/shmily453397/6480299。你把它下載下傳下來,如果代碼不想改動就放在C槽根目錄底下。
關于achi 位址的問題,操作有個前提。首先你得先把硬碟模式改為AHCI。這個網上有教程,大緻是兩個步驟,改系統資料庫某值為0,然後重新開機後進bios,講ide改成AHCI.再開機即可。
另外,我現在還遇到一個困難,就是我要根據achi base address來讀出相應的value。可是winio不支援讀取超過2G以外記憶體,我還在想辦法。希望好心人幫忙!
放個最後弄好的AHCI 圖!醜了點,不過很happy!