5136|8

55

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何获取设备序列号sn [复制链接]

extern "C" __declspec(dllimport)
BOOL KernelIoControl(
  DWORD dwIoControlCode, LPVOID lpInBuf, DWORD nInBufSize,
  LPVOID lpOutBuf, DWORD nOutBufSize, LPDWORD lpBytesReturned
);

#define IOCTL_HAL_GET_DEVICEID CTL_CODE(FILE_DEVICE_HAL, 21, METHOD_BUFFERED, FILE_ANY_ACCESS)

CString GetSerialNumberFromKernelIoControl()
{
      DWORD dwOutBytes;
      const int nBuffSize = 4096;
      byte arrOutBuff[nBuffSize];

      BOOL bRes = ::KernelIoControl(IOCTL_HAL_GET_DEVICEID,
                                    0, 0, arrOutBuff, nBuffSize, &dwOutBytes);

      if (bRes) {
            CString strDeviceInfo;
            for (unsigned int i = 0; i <dwOutBytes; i++) {
                  CString strNextChar;
                  strNextChar.Format(TEXT("%02X"), arrOutBuff);
                  strDeviceInfo += strNextChar;
            }
            CString strDeviceId =
                  strDeviceInfo.Mid(40,2) +
                  strDeviceInfo.Mid(45,9) +
                  strDeviceInfo.Mid(70,6);

            return strDeviceId;
      } else {
            return _T("");
      }
}
我在网上看到这段代码,但是获取的号码是UUID,并未包含序列号。。。
请高手指点,我的设备是HP ipaq2000系列,我用VC2005。

最新回复

用IOCTL_HAL_GET_DEVICEID取回来的ID就可以用做设备的序列号,因为它应该是唯一的,当然这需要设备的驱动提供支持 一般这个ID是通过读Flash的ID号,然后经过加密再加上产品公司的MS授权ID号等信息组成的,如果是通过MS LOGO认证的产品必须支持这个接口   详情 回复 发表于 2009-2-6 18:18
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
设备序列号没有标准要求机器必须提供。序列号不是设备全球唯一号。
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这个东西是生产商自己定义的吧。
芯片ID就能读出来,
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

4
 
那请问楼上两位,如果我的应用程序要用到序列号,应该怎么办?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

5
 
设备序列号是生产厂商为了便于管理、维修而自己规定的一套序列号,没有统一标准。
芯片ID是芯片厂商自己设定的芯片型号、类型、批次等信息组合,有的芯片可能会有唯一性ID,有的只有统一型号,连批次都没有。这样的ID读出来也没什么用,只能用来判断这个芯片是否是正确的型号。

应用程序需要用的序列号如果希望跟机器相关,而不是自己随便算一个唯一序列号,就必须底层硬件确定能提供唯一的ID,比如使用加密芯片,使用具有唯一ID的芯片,比如电脑上常见的软件注册需要用网卡的MAC地址就是这样的做法。
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

6
 
不一定能得到,因为设备不一定有LZ想要的SN
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 ylx1982 的回复:
那请问楼上两位,如果我的应用程序要用到序列号,应该怎么办?


这个你要找做这个东西的厂商才行啊。shuiyan介绍的很详细了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
设备序列号有格式的。可以再遵循微软格式的基础上加。微软好像是16位的还是32位的。
然后你可以自己扩展下。
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

9
 
用IOCTL_HAL_GET_DEVICEID取回来的ID就可以用做设备的序列号,因为它应该是唯一的,当然这需要设备的驱动提供支持
一般这个ID是通过读Flash的ID号,然后经过加密再加上产品公司的MS授权ID号等信息组成的,如果是通过MS LOGO认证的产品必须支持这个接口
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表