本人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!