中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-15 03:15
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 给论坛添点动力!!来个小项目!!硬盘序列号
楼 主 给论坛添点动力!!来个小项目!!硬盘序列号 发表于 2009-11-30 21:15 ·  中国 黑龙江 伊春 伊美区 联通
初级用户
积分 25
发帖 8
注册 2009-03-12 00:01
UID 141040
性别 男
状态 离线
希望坛子里的高人,动动手也算是帮在下一个忙了,编一个DOS下的小程序!

要求:纯DOS下读取硬盘序列号(SN序列号包括串口大硬盘),什么语言都可以,要EXE 和源码或驱动,最好是像MHDD那样不通过BIOS直接读取!~

本人愿出100RMB,做为鼓励(不带赖地,这点可放心),多少意思意思吧!!
知道高人很多,就先到先得。。要是每人都做一份,我还真给不起呢,呵呵

有时间,有这个能力的人请先与我电话联系(我给回电)!! 谢谢!!

联系电话:15046565050 佟力
信箱:tongli.net@126.com(发程序请附上您农行或工行帐户)成功秒付!!

怎么没人回复呢,是DOS下实现不了,还是什么原因?

[ Last edited by tongli on 2009-12-6 at 10:55 ]
2 发表于 2010-01-02 23:36 ·  中国 台湾 中华电信(HiNet)数据中心
初级用户
积分 68
发帖 17
注册 2008-03-02 14:38
UID 111866
性别 男
状态 离线
免費~~~~~~~~~~~~


// 傳入磁碟機代號 A / B / C - Z
// turbo C / Borland C 寫法
long GetDiskSerial(char driver)
{
union REGS regs;
struct SREGS sregs;

struct DISK
{
unsigned code;
long serial;
char volume;
char type;
} SERIAL;

regs.h.ah =0x69;
regs.h.al =0x00;
regs.h.bl =toupper(driver)-'A'+1;
regs.x.dx =FP_OFF(&SERIAL);
sregs.ds =FP_SEG(&SERIAL);

intdosx(&regs,&regs,&sregs);
if(regs.x.cflag==0) return(SERIAL.serial); else return(0);
}


// 傳入磁碟機代號 A / B / C - Z
// WINDOWS 下 MINGW32 寫法
DWORD GetDiskSerial(char driver)
{
char lpRootPathName;
char lpVolumeNameBuffer;
DWORD nVolumeNameSize=256;
DWORD lpVolumeSerialNumber;
DWORD lpMaximumComponentLength;
DWORD lpFileSystemFlags;
char lpFileSystemNameBuffer;
DWORD nFileSystemNameSize=256;

sprintf(lpRootPathName, "%c:\\", driver);

GetVolumeInformation(
lpRootPathName,
lpVolumeNameBuffer,
nVolumeNameSize,
&lpVolumeSerialNumber,
&lpMaximumComponentLength,
&lpFileSystemFlags,
lpFileSystemNameBuffer,
nFileSystemNameSize );

return(lpVolumeSerialNumber);
}


// 傳入磁碟機代號 A / B / C - Z
// DOS 下 DJGPP 寫法
DWORD GetDiskSerial(char driver)
{
__dpmi_regs regs;
char Buffer;
char *ts, *ss;
unsigned Serial;

if(driver<'A' || driver>'Z') return(0);

regs.h.ah =0x69;
regs.h.al =0x00;
regs.h.bl =driver-'A'+1;
regs.x.ds =__tb >> 4;
regs.x.dx =__tb & 0x0f;

__dpmi_int (0x21, &regs);
if(regs.x.flags & 1) return(0);

dosmemget (__tb, 30, &Buffer);
ts = &Buffer;
ss = (char *)&Serial;
*ss++ = *ts++;
*ss++ = *ts++;
*ss++ = *ts++;
*ss++ = *ts++;
return(Serial);
}
3 发表于 2010-01-04 15:33 ·  中国 辽宁 大连 金州区 联通
中级用户
★★
www.ecgui.com
积分 272
发帖 123
注册 2006-09-23 07:38
UID 63446
状态 离线
楼上贴代码很不错!
eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
4 发表于 2010-01-04 17:57 ·  中国 北京 电信
高级用户
★★
流落街头
积分 570
发帖 272
注册 2005-10-17 10:51
UID 43609
性别 男
来自 北京
状态 离线
Originally posted by winson4829 at 2010-1-2 23:36:
免費~~~~~~~~~~~~


// 傳入磁碟機代號 A / B / C - Z
// turbo C / Borland C 寫法
long GetDiskSerial(char driver)
{
union REGS regs;
struct SREGS sregs;

struct DISK
...


我想楼主要的硬盘的序列号,好像应该是下边这个吧
附件
未命名x.GIF
5 发表于 2010-10-05 22:48 ·  中国 安徽 合肥 电信
新手上路
积分 19
发帖 8
注册 2010-01-08 11:08
UID 158225
性别 男
状态 离线
对啊。。号呢。。。 我也需要这个啊。主板序列号 硬盘序列号啥的 只要是硬件号就行,可惜就是找不到
论坛跳转: