首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

请问"通过端口获取IDE硬盘ID"一文的头文件

2012-01-29 
请教通过端口获取IDE硬盘ID一文的头文件http://www.ccrun.com/article.asp?i473&d34g666#include#incl

请教"通过端口获取IDE硬盘ID"一文的头文件
http://www.ccrun.com/article.asp?i=473&d=34g666

#include  
#include  
#include  
#include  
#include  
char   *GetAscii(unsigned   int   inData[],   int   offStart,   int   offEnd);
int   main(void)
{
      unsigned   int       diskData[256];         /*   Disk   data                                     */
      unsigned   int       offset;                       /*   Disk   data   offset                       */
      int                         loop;
      int                         numDrv;                       /*   Number   of   IDE   hard   drives     */
      union   REGS           registers;
      unsigned   int       biosCyl[2];               /*   Cylinders,   Heads,   Sectors   */
      unsigned   int       biosHead[2];
      unsigned   int       biosSec   [2];
      numDrv   =   peekb(0x40,   0x75);             /*   BIOS   Data   area,   Number   of   Hard   disks   */
      for   (loop   =   0;   loop   <   numDrv;   loop++)
      {
            while   (inp(0x01f7)   !=   0x50);     /*   Wait   for   controller   not   busy                   */
            outp(0x01f6,   (loop   ==   0   ?   0xa0   :   0xb0));     /*   Get   first/second   drive       */
            outp(0x01f7,   0xec);                                               /*   Get   drive   info   data             */
            while   (inp(0x1f7)   !=   0x58);       /*   Wait   for   data   ready                                     */
            for   (offset   =   0;   offset   !=   256;   offset++)   /*   Read   "sector "                         */
//   本文转自   C++Builder   研究   -   http://www.ccrun.com/article.asp?i=473&d=34g666
                  diskData[offset]   =   inpw(0x1f0);
            /*   Get   BIOS   drive   info   */


            registers.h.ah   =   0x08;                 /*   Get   drive   info                                                     */
            registers.h.dl   =   0x80   +   loop;   /*   Drive   is   80H   for   Disk   0,   81H   for   Disk   1   */
            int86(0x13,   ?isters,   ?isters);
            if   (!registers.x.cflag)               /*   All   OK   if   carry   not   set   */
            {
                  biosHead[loop]   =   registers.h.dh   +   1;             /*   Heads   are   from   0   */
                  biosSec[loop]     =   registers.h.cl   &   0x3f;       /*   sec   is   bits   5   -   0   */
                  /*   +1   because   starts   from   0   and   +1   for   FDISK   leaving   one   out   */
                  biosCyl[loop]     =   ((registers.h.cl   &   0xc0)   < <   2)   +   registers.h.ch   +   2;
            }   /*   end   of   if   */
            printf( "DRIVE   %d:\n ",   loop);
            printf( "Model   Number______________________:   %s\n ",   GetAscii(diskData,   27,   46));
            printf( "Serial   Number_____________________:   %s\n ",   GetAscii(diskData,   10,   19));
            printf( "Controller   Revision   Number________:   %s\n\n ",   GetAscii(diskData,   23,   26));
            printf( "Able   to   do   Double   Word   Transfer___:   %6s\n ",   (diskData[48]   ==   0   ?   "No "   :   "Yes "));
            printf( "Controller   type___________________:       %04X\n ",   diskData[20]);
            printf( "Controller   buffer   size   (bytes)____:   %6u\n ",   diskData[21]   *   512);
            printf( "Number   of   ECC   bytes   transferred___:   %6u\n ",   diskData[22]);
            printf( "Number   of   sectors   per   interrupt___:   %6u\n\n ",   diskData[47]);
            printf( "Hard   Disk   Reports\n ");
            printf( "Number   of   Cylinders   (Fixed)_______:   %6u\n ",   diskData[1]);
            printf( "Number   of   Heads___________________:   %6u\n ",   diskData[3]);


            printf( "Number   of   Sectors   per   Track_______:   %6u\n\n ",   diskData[6]);
            printf( "BIOS   Reports\n ");
            printf( "Number   of   Cylinders_______________:   %6u\n ",   biosCyl[loop]);
            printf( "Number   of   Heads___________________:   %6u\n ",   biosHead[loop]);
            printf( "Number   of   Sectors   per   Track_______:   %6u\n\n ",   biosSec[loop]);
            printf( "Press   any   key   to   continue...\n\n ");
            getch();
      }   /*   end   of   for   */
      return   0;
}   /*   main()   */
char   *GetAscii(unsigned   int   inData[],   int   offStart,   int   offEnd)
{
      static   char   retVal[255];
      int                   loop,   loop1;
      for   (loop   =   offStart,   loop1   =   0;   loop   <=   offEnd;   loop++)
      {
            retVal[loop1++]   =   (char   )(inData[loop]   /   256);     /*   Get   High   byte   */
            retVal[loop1++]   =   (char   )(inData[loop]   %   256);     /*   Get   Low   byte     */
      }   /*   end   of   for   */
      retVal[loop1]   =   '\0 ';         /*   Make   sure   it   ends   in   a   NULL   character   */
      return   retVal;
}   /*   GetAscii()   */  


[解决办法]
要什么头文件,直接编译应该就行了,里面没有用到什么特殊函数。

热点排行