dos下取sata盘的型号与序列号问题,紧急求救
kinbo 2012-05-16 12:16:42 各位老大,
小弟遇到一个头疼的问题,在dos下读取sata硬盘的型号和序列号,
在网上找了不少资料,但是大多都是针对IDE硬盘来的,对于sata硬盘,尤其是AHCI模式的sata硬盘视乎有点无能为力,
在此向各位求救了。
目前参考的源码如下:
#include<stdio.h>
#include<conio.h>
#include <stdlib.h>
#include<dos.h>
main()
{
unsigned char p[512];
unsigned int i;
unsigned int j=0;
unsigned int flag2;
unsigned int flag;
outportb(0x1f6,0xa0);
outportb(0x1f2,0x1);
outportb(0x1f3,1);
outportb(0x1f4,1);
outportb(0x1f5,1);
outportb(0x1f7,0xec);
do
{
flag=inportb(0x1f7);
printf("ide status is %d\n",flag);
}while(flag!=0x58);
for(i=0;i<256;i++)
{
flag2=inport(0x1f0);
p[j++]=(flag2<<8)>>8;
printf("%c",p[j]);
p[j++]=(flag2>>8);
printf("%c",p[j]);
}
printf("disk sn number=");
for(i=20;i<40;i++)
if(i%2==0)
printf("%c",p[i+1]);
else
printf("%c",p[i-1]);
printf("\n\ndisk model=");
for(i=54;i<94;i++)
if(i%2==0)
printf("%c",p[i+1]);
else
printf("%c",p[i-1]);
}
结果一直都是
IDE status is 81
望各位老大帮忙分析一下,是否这段代码对sata硬盘不适用?该怎么调试或者修改?