中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » 给论坛添点动力!!来个小项目!!硬盘序列号
作者:
标题: 给论坛添点动力!!来个小项目!!硬盘序列号 上一主题 | 下一主题
tongli
初级用户





积分 25
发帖 8
注册 2009-3-12
状态 离线
『楼 主』:  给论坛添点动力!!来个小项目!!硬盘序列号

希望坛子里的高人,动动手也算是帮在下一个忙了,编一个DOS下的小程序!

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

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

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

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

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

[ Last edited by tongli on 2009-12-6 at 10:55 ]

2009-11-30 21:15
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
winson4829
初级用户





积分 58
发帖 17
注册 2008-3-2
状态 离线
『第 2 楼』:  

免費~~~~~~~~~~~~
// 傳入磁碟機代號 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[11];
      char     type[8];
   }  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[256];
        char         lpVolumeNameBuffer[256];
        DWORD         nVolumeNameSize=256;
        DWORD        lpVolumeSerialNumber;
        DWORD         lpMaximumComponentLength;
        DWORD         lpFileSystemFlags;
        char         lpFileSystemNameBuffer[256];
        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[30];
        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[2];
        ss  = (char *)&Serial;
        *ss++ = *ts++;
        *ss++ = *ts++;
        *ss++ = *ts++;
        *ss++ = *ts++;
        return(Serial);
}


2010-1-2 23:36
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ecurb2006
中级用户

www.ecgui.com



积分 272
发帖 123
注册 2006-9-23
状态 离线
『第 3 楼』:  

楼上贴代码很不错!



eCGUI-微型嵌入式GUI/ DOS/Linux/uC/OS-II/等 图形界面开发
www.ecgui.com
2010-1-4 15:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
19951001
高级用户

流落街头



积分 570
发帖 272
注册 2005-10-17
来自 北京
状态 离线
『第 4 楼』:  



  Quote:
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
  ...

我想楼主要的硬盘的序列号,好像应该是下边这个吧

附件 1: 未命名x.GIF (2010-1-4 17:57, 16.8 K, 下载附件所需积分 1 点 )


2010-1-4 17:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
woaicaomei
新手上路





积分 19
发帖 8
注册 2010-1-8
状态 离线
『第 5 楼』:  

对啊。。号呢。。。 我也需要这个啊。主板序列号 硬盘序列号啥的  只要是硬件号就行,可惜就是找不到

2010-10-5 22:48
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: