硬盘系列号

qiyousyc 2006-03-08 12:22:05
如何得到硬盘的物理系列号
IDE口的硬盘我知道如何得到
串口的硬盘要如何得到呢?
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiyousyc 2006-03-19
  • 打赏
  • 举报
回复
白检分
bm1408 2006-03-08
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <string.h>

char *getascii (unsigned int in_data [], int off_start, int off_end);

void main (void)
{
unsigned int dd [256]; /* DiskData */
unsigned int dd_off; /* DiskData offset */

while (inp (0x1F7) != 0x50) /* Wait for controller not busy */
;

outp (0x1F6, 0xA0); /* Get first/second drive */

outp (0x1F7, 0xEC); /* Get drive info data */

while (inp (0x1F7) != 0x58) /* Wait for data ready */
;

for (dd_off = 0; dd_off != 256; dd_off++) /* Read "sector" */
dd [dd_off] = inpw (0x1F0);

printf ("The Serial Number Hard Disk [C] is %s", getascii (dd, 10, 19));

}

char *getascii (unsigned int in_data [], int off_start, int off_end)
{
static char ret_val [255];
int loop, loop1;

for (loop = off_start, loop1 = 0; loop <= off_end; loop++)
{
ret_val [loop1++] = (char) (in_data [loop] / 256); /* Get High byte */
ret_val [loop1++] = (char) (in_data [loop] % 256); /* Get Low byte */
}
ret_val [loop1] = ""; /* Make sure it ends in a NULL character */
return (ret_val);
}

/* 程序2: 获得逻辑盘C的序列号 */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <dos.h>

void main(void)
{
char serial_no[10];
union REGS r;
struct SREGS s;
unsigned sno1, sno2;

r.x.ax = 0x6900;
r.h.bl = 3; /* A:=1, B:=2, C:=3 etc. */
segread(&s);
intdosx(&r, &r, &s);
if (r.x.cflag)
*serial_no = "";
else
{
sno2 = *((unsigned far *)MK_FP(s.ds, r.x.dx+2));
sno1 = *((unsigned far *)MK_FP(s.ds, r.x.dx+4));
sprintf(serial_no, "%04X-%04X
", sno1, sno2);
}
printf("The Serial Number of Login Disk [C] is %s", serial_no );

}
qiyousyc 2006-03-08
  • 打赏
  • 举报
回复
大哥!不是这个
是物理系列号

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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