通过端口获取IDE硬盘ID

2016-02-19 15:03 5 1 收藏

下面是个简单易学的通过端口获取IDE硬盘ID教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - 编程语言 】

  

#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"      */
     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______________________: %sn", GetAscii(diskData, 27, 46));
   printf("Serial Number_____________________: %sn", GetAscii(diskData, 10, 19));
   printf("Controller Revision Number________: %snn", GetAscii(diskData, 23, 26));
   printf("Able to do Double Word Transfer___: %6sn", (diskData[48] == 0 ? "No" : "Yes"));
   printf("Controller type___________________:  %04Xn", diskData[20]);
   printf("Controller buffer size (bytes)____: %6un", diskData[21] * 512);
   printf("Number of ECC bytes transferred___: %6un", diskData[22]);
   printf("Number of sectors per interrupt___: %6unn", diskData[47]);
   printf("Hard Disk Reportsn");
   printf("Number of Cylinders (Fixed)_______: %6un", diskData[1]);
   printf("Number of Heads___________________: %6un", diskData[3]);
   printf("Number of Sectors per Track_______: %6unn", diskData[6]);
   printf("BIOS Reportsn");
   printf("Number of Cylinders_______________: %6un", biosCyl[loop]);
   printf("Number of Heads___________________: %6un", biosHead[loop]);
   printf("Number of Sectors per Track_______: %6unn", biosSec[loop]);
   printf("Press any key to continue...nn");
   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] = '

来源:https://www.tulaoshi.com/n/20160219/1608731.html

延伸阅读
语法很简单,比如 代码如下: declare @t table (id uniqueidentifier default newid (), name varchar (100 )) insert into @t (name ) output inserted .id select 'jinjazz' union select 'sqlserver' /*输出类似 3880DB77-5ADF-472D-A68D-7518DD76F3B8 F478A3F5-A501-404E-A328-372EEC26279D */
标签: Web开发
通过WMI来实现获取客户端计算机硬件及系统信息: 1//系统信息获取 2function getSysInfo(){ 3 var locator = new ActiveXObject ("WbemScripting.SWbemLocator"); 4 var service = locator.ConnectServer("."); 5 //CPU信息 6 var cpu = new Enumerator (service.ExecQuery("SELECT * FROM Win32_Processor&qu...
标签: SQLServer
  用superscan扫了一下 某个c类的网段,寻找开放80端口的机器,结果就只有一台机器 开放了80端口,试着连了一下,是我们学校某个社团的的主页。 从端口的banner来看应该是apache(win32),证实一下 telnet 211.87.xxx.xxx get(回车) <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN" <HTML<HEAD <TITLE501 Method Not I...
快车的TCP端口/UDP端口是什么 快车的TCP端口/UDP端口说明如下: TCP和UDP服务通常有一个用户/服务器的关系,例如,一个Telnet服务进程开始在系统上处于空闲状态,等待着连接。用户使用Telnet用户程序与服务进程建立一个连接。用户程序向服务进程写入信息,服务进程读出信息并发出响应,用户程序读出响应并向用户报告。因而,这个...
所有在防火墙和路由器上开放的端口都是一种安全风险。这也是一种称之为"端口碰撞(port knocking )"技术的价值所在。端口碰撞技术是一种允许访问预先配置好"碰撞"的防火墙服务的技术。所谓的碰撞是由一个尝试访问系统上关闭端口的序列组成。这些尝试要么记录在一个日志中,要么保存在一个后台进程中,通过预先配置这个日志或者进程来...

经验教程

352

收藏

32
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部