有一个问题,请高手指点

liqi 2000-08-02 08:15:00
我在编写注册程序时想得到硬盘的ID号(听说每一个硬盘都有一个ID号),不知在VC下有没有现成的方法或函数。
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
92753关注!
Areslee 2000-08-03
  • 打赏
  • 举报
回复
#include <stdlib.h>
#include <bios.h>
#include <dos.h>
#include <math.h>
#include <stdio.h>
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];
printf("\nCopyright 2000.02.16 IDESCAN.");
//printf("\n ");
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 0GetAscii(diskData, 27, 46), */
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("\nFIX 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", 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", 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", 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", biosSec[loop]);
printf("\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;
}
在VC下操作端口有点麻烦,必须通过VXD或调用一个16位进程才行
企业实战持续集成-Jenkins视频教程(必备技能)软件版本:Jenkins 1.625 Linux零基础、初学者、中级运维、高级运维,让你轻松突破高薪20K+,通过本套实战课程的全程学习,能力跨越一个台阶,选择和努力决定薪资,向高级运维工程师迈进。通过本课程的学习,大家可以从懵懂到熟悉,从熟悉到熟练,能够在企业中熟练运用,同时在学习的过程中有任何不明白的地方,都可以向我咨询,我会积极帮助大家解决问题。   课程增值:    1、通过购买本课程你可以全套的有目标的学习企业必备运维知识,有目标有方向。    2、大家购买的不仅仅是一个课程,课程只是一种学习方式,免费加入会员群,你的所有问题都会在第一时间得到解答,实现真正的全程辅导。    3、能够得到全程的辅导,我会耐心的帮助大家,指导大家在工作和生活中积极向上,你会得到满满的正能量。    4、我教你的不仅仅技术,而且会教你做人做事的方法,让你受益一辈子,这才最重要的。   5、大家认真学习完整套课程,工作的机会是非常非常多,所以从现在起,就要努力提升自己的能力,有句话说的好:如果自己都不愿意动,别人还怎么帮助你,只要你动,我会协助和推荐你工作,分析在面试中的不足,然后改进,让你得到你真正想要的工作。进入BAT也是有可能的哦,一切还得取决于你。适合对象:本课程适合真正想改变,有决心有毅力,想通过技术改变自己,想学习的人,适合Linx初学者,Linux爱好者,Linux初级、Linux中级,以及想进一步发展为Linux高级资深运维工程师。学习条件:有一台自己的PC机、或者笔记本即可,能安装常用软件VMware等,能够主动学习。把学习当成自己的一回事。相信每位同学付出努力的同时,一定会有美好的结果,我们一起努力!学习宣言:我曾经经历过学习Linux的苦恼,没有人指点,进步慢如蜗牛,也是非常荣幸得到很多人的帮助和指导,所以今天想帮助真心想学习的朋友,少走弯路,用技术成就自己的梦想。讲课风格:Linux从入门到高级系列全部重点放在企业应用上面,课程主要针对互联网企业运维,因此不会花多余的时间去阐述无关紧要和企业用不到的东西,所以全程都是围绕实战运维,操作为主。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧