Board logo

标题: 给论坛添点动力!!来个小项目!!硬盘序列号 [打印本页]

作者: tongli     时间: 2009-11-30 21:15    标题: 给论坛添点动力!!来个小项目!!硬盘序列号

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

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

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

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

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

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

[ Last edited by tongli on 2009-12-6 at 10:55 ]
作者: winson4829     时间: 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
   {
      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);
}

作者: ecurb2006     时间: 2010-1-4 15:33
楼上贴代码很不错!
作者: 19951001     时间: 2010-1-4 17:57


  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点 )



作者: woaicaomei     时间: 2010-10-5 22:48
对啊。。号呢。。。 我也需要这个啊。主板序列号 硬盘序列号啥的  只要是硬件号就行,可惜就是找不到