通过MS的S.M.A.R.T.接口,我们可以直接从RING3调用API DeviceIoControl()来获取IDE硬盘信息,可是,如果是SATA硬盘,该怎么办呢?非常急啊,先感谢各位高手了........

解决方案 »

  1.   

    BOOL GetVolumeInformation(
      LPCTSTR lpRootPathName,
      LPTSTR lpVolumeNameBuffer,
      DWORD nVolumeNameSize,
      LPDWORD lpVolumeSerialNumber,
      LPDWORD lpMaximumComponentLength,
      LPDWORD lpFileSystemFlags,
      LPTSTR lpFileSystemNameBuffer,
      DWORD nFileSystemNameSize
    );
      

  2.   

    DWORD dwIDESerial;
        CString str;
        GetVolumeInformation("C:\\",NULL,NULL,&dwIDESerial,NULL,NULL,NULL,NULL);
        str.Format( "硬盘序列号: %X - %X",HIWORD(dwIDESerial),LOWORD(dwIDESerial));
        AfxMessageBox(str);
      

  3.   

    http://dev.csdn.net/develop/article/17/17097.shtm以上提供的方法不权可以获得IDE硬盘的序列号,也可以获得SATA硬盘的序列号。
      

  4.   

    按照Windows的结构,SATA硬盘也已经在HAL层抽象过了,如果GetVolumeInformation能得到的PATA的序列号,也就能得到SATA的序列号。
      

  5.   

    对DeviceIoControl()应该也同理。
      

  6.   

    一样可以的,DeviceIoControl 的 CTL_CODE 只与驱动有关